подклассы CALayer выдают EXC_BAD_ACCESS при анимации, а прямые экземпляры - нет? - PullRequest
4 голосов
/ 13 ноября 2011

В обработчике событий touchesMoved ... почему происходит разрыв:

CALayer *slayer = (CALayer*)[[self.layer sublayers] objectAtIndex:0];
slayer.position=CGPointMake(x,y);

, но это прекрасно работает:

CALayer *slayer = (CALayer*)[[self.layer sublayers] objectAtIndex:0];

[CATransaction begin]; // temporarily disable layer animations
[CATransaction setValue:(id)kCFBooleanTrue  forKey:kCATransactionDisableActions];
slayer.position=CGPointMake(x,y);
[CATransaction commit]; 

для подкласса CALayer, нопохоже, что оба они работают для экземпляра самого класса CALayer?

Подробнее ...

К сожалению, приложение работало нормально под iOS 4.3, и теперь генерируется тот же код EXC_BAD_ACCESS когда я пытаюсь анимировать его параметры.

Я понимаю, что EXC_BAD_ACCESS генерируется, когда вы отправляете сообщение объекту, который был удален, поэтому, пытаясь исправить эту проблему, я позаботилсячтобы все слои были сохранены и сохранены в кэше, чтобы они оставались до тех пор, пока я не очистил кэш.Я также проверяю счетчик сохранности рассматриваемого слоя, и во время вызова он нарушает 3, поэтому он является допустимым слоем.Я попытался запустить с NSZombieEnabled, но он выдает те же результаты и никаких других сообщений об ошибках.

Есть что-то, что я пропускаю?Что-то изменилось между iOS4.3 и iOS5?Что вызывает мой предположительно нормальный слой, приводящий к сбою Core Animation?


fwiw: я использую Xcode 4.2, в июне 2009 года, Macbook Pro.

...