CABasicAnimation с аварийным завершением делегата - PullRequest
0 голосов
/ 18 марта 2011
self.mLineAnimation = [CABasicAnimation animationWithKeyPath:@"path"];
mLineAnimation.fromValue = (id)mStartPath;
mLineAnimation.toValue = (id)mEndPath;
mLineAnimation.duration = 2; 
mLineAnimation.repeatCount = 0;
[mLineAnimation setDelegate:self];
mLineAnimation.removedOnCompletion = NO;
mLineAnimation.fillMode = kCAFillModeForwards;
mLineAnimation.timingFunction = [CAMediaTimingFunction
                                    functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[mShapeLayer addAnimation: mLineAnimation forKey: @"animateLine"];

Обратите внимание, что я установил делегат для реализации animationDidStop.Моя анимация запускается в ячейке табличного представления.Теперь, когда я быстро прокручиваю таблицу, приложение падает с EXC_BAD_ACCESS.Если я не задаю делегата, приложение не падает.Не могли бы вы привести, что делать здесь?Трассировка стека следующая:

#0  0x0168ea63 in objc_msgSend
#1  0x056ff0a0 in ??
#2  0x00ee36cb in run_animation_callbacks
#3  0x00ee3589 in CA::timer_callback
#4  0x0150dfe3 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
#5  0x0150f594 in __CFRunLoopDoTimer
#6  0x0146bcc9 in __CFRunLoopRun
#7  0x0146b240 in CFRunLoopRunSpecific
#8  0x0146b161 in CFRunLoopRunInMode
#9  0x01cd9268 in GSEventRunModal
#10 0x01cd932d in GSEventRun
#11 0x003da42e in UIApplicationMain
#12 0x00002580 in main at main.m:14

1 Ответ

1 голос
/ 18 марта 2011

Анимация останавливается после разрушения объекта, создавшего анимацию (объект, на который «self» ссылается в «self.mLineAnimation»).Затем анимация пытается отправить сообщение об уничтоженном объекте.

Запустите ваш исполняемый файл с NSZombieEnabled, что превратит сбой в objc_MsgSend в исключение Objective-C, которое сломает отладчик.

...