animateWithDuration: анимации: завершение: сбои в симуляторе

#cocoa-touch #ios4 #uiview #core-animation

#cocoa-touch #ios4 #пользовательский просмотр #ядро-анимация

Вопрос:

Обновить

Я тоже сталкиваюсь с той же проблемой, вызовы animateWithDuration:animations:completion: отлично работают на устройстве, но сбой в симуляторе.

 [UIView animateWithDuration:0.5 
                 animations:^{
                     NSLog(@"Begin");
                 }
                 completion:^(BOOL finished){
                     NSLog(@"End");
                 }];
  

Как вы можете видеть, я не обращаюсь ни к каким другим объектам, и он все равно завершится с EXC_BAD_ACCESS.

Обновление 2

Кажется, что сбой происходит только в том случае, если вы передаете block при completion: передаче NULL, работает нормально.

 [UIView animateWithDuration:0.5 
                 animations:^{
                     NSLog(@"Begin");
                 }
                 completion:NULL];
  

Оригинальный вопрос

Я использовал телефон для разработки в основном потому, что использовал библиотеку, которая не была скомпилирована для Intel, но теперь переключилась обратно на симулятор, чтобы ускорить процесс.

Я получаю постоянные сбои при использовании UIView animateWithDuration, и мне пришлось временно закомментировать их в моем коде. Они отлично работают на телефоне. Я использую последнюю версию SDK 4.3.1 (почти) и выполняю компиляцию для версии 4.0 и далее.

Есть идеи, почему это сбой?

     [UIView animateWithDuration:0.5 animations:^ {
    mapTableOverlay.alpha = 0.8;} completion:^(BOOL finished){}];
  

Получение EXC_BAD_ACCESS при вызове строки выше. Спасибо за помощь….

Комментарии:

1. Я вижу, что вы также уже включили блок завершения.. но вместо того, чтобы иметь его пустым, не могли бы вы поместить только для тестирования инструкцию NSLog и посмотреть, произойдет ли сбой?

2. вы нашли решение для этого? Я сталкиваюсь с точно такой же проблемой, но сначала не понимал, что это было только в симуляторе.

3. Я сталкиваюсь с той же проблемой: / Есть новая идея по этому поводу? 🙁

Ответ №1:

Это не совсем ответ, хотя в нем описывается, что вызвало проблему, и что может ее облегчить — у меня была точно такая же проблема, внезапно любой UIView animateWithDuration зависал, даже если никакие объекты не были переданы и даже без блока по завершении. Это началось, когда я добавил библиотеки Urban Airship и связанные с ними фреймворки (libUAirship-1.1.0.a, FNetwork.framework, MobileCoreServices.framework, Security.framework, SystemConfiguration.фреймворк, libz.dylib, libsqlite3.dylib, CoreTelephony.framework, StoreKit.framework) и быстро прекратился, когда я снова от них избавился. Я знаю, что это не имеет ничего общего с библиотекой sqlite и платформой StoreKit, потому что я использую их сейчас, но я никогда не отслеживал это должным образом. Я был бы благодарен и за более подробный ответ!

Комментарии:

1. Похоже, это связано с библиотекой Urban Airship. С тех пор я удалил эту библиотеку, поскольку она мне не нужна в текущей версии. Проблема устранена.

Ответ №2:

Мне нужно было бы увидеть больше кода, чтобы быть уверенным, но единственный объект, к которому вы обращаетесь, mapTableOverlay так что, похоже, проблема должна быть с этим объектом. Посмотрите на состояние при вызове этой анимации. Возможно ли, что mapTableOverlay выпускается без значения iVar, равного нулю (возможно, в viewDidUnload )?

Было бы полезно добавить следующее к вашему вопросу:

  1. Код, описывающий mapTableOverlay жизненный цикл

  2. Код, показывающий контекст анимации

  3. Трассировка стека после сбоя