[UIViewAnimationState animationDidStop: закончено:]: сообщение отправлено на освобожденный экземпляр - PullRequest
0 голосов
/ 19 марта 2012

У меня есть подкласс UIImageView, который периодически обновляется для разных изображений. Я использовал код ниже без проблем:

UIImage *cachedImage = [[SDImageCache sharedImageCache] imageFromKey:blobKey];
if(cachedImage==nil) {
    NSData *imageData=[NSData dataWithContentsOfURL:url];
    cachedImage = [UIImage imageWithData:imageData];
    [[SDImageCache sharedImageCache] storeImage:cachedImage imageData:imageData forKey:blobKey toDisk:YES];
} 
self.image=cachedImage;
CATransition *transition = [CATransition animation];
transition.duration = 2.0f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;    
[self.layer addAnimation:transition forKey:nil];

Проблема заключается в том, что когда я решаю использовать вместо кода выше анимацию в стиле «блока», как Apple предлагает для iOS 4.0 +:

[UIView transitionWithView:self duration:2.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    self.image=cachedImage;
} completion:^(BOOL finished) {
    // do something..
}];

После того, как я применил новый код, я получил сообщение об ошибке: «сообщение отправлено освобожденному экземпляру». (У меня включен iOS 5.1 SDK и ARC.) Есть ли какой-то аспект блочного программирования, который я должен изучить?

Ответы [ 2 ]

1 голос
/ 10 августа 2012

в моем случае присвоение нолю свойства изображения после того, как блок анимации работал нормально.

0 голосов
/ 19 марта 2012

Возможно, что ваш cachedImage освобождается до выполнения блока. В первом примере вы устанавливаете self.image (который сохранит изображение) перед выполнением анимации. Попробуйте создать дополнительное свойство держателя UIImage, которое просто сохраняет ссылку на cachedImage, так что оно остается неизменным при выполнении блока.

...