[UIViewAnimationState animationDidStop:finished:]:发送给解除分配实例的消息

时间:2012-03-19 16:23:28

标签: ios uiimageview automatic-ref-counting objective-c-blocks uiviewanimation

我有一个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];

问题是当我决定使用而不是上面的代码时,苹果建议在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 个答案:

答案 0 :(得分:1)

在我的情况下,在动画块工作正常后使图像属性为nil。

答案 1 :(得分:0)

可能在块执行之前释放了cachedImage。在第一个示例中,您将在执行动画之前设置self.image(将保留图像)。尝试创建一个额外的UIImage holder属性,该属性只保留对cachedImage的引用,以便在块执行时保持不变。