0

私はUIImageViewのサブクラスを持っています。上記の代わりにコードで、私が使用することを決定したとき[UIViewAnimationState animationDidStop:finished:]:メッセージが割り当て解除されたインスタンスに送信されました

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]; 

問題があり、「ブロック」は、アップルのようにスタイルのアニメーションは4.0+ iOS用示唆:私は何の問題もなく以下のコードを使用

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

新しいコードを適用した後、「メッセージが割り当て解除されたインスタンスに送信されました」というエラーメッセージが表示されます。 (私はiOS 5.1 SDKとARCを有効にしています)ブロック学習の面はありますか?

答えて

0

ブロックが実行される前にcachedImageが解放されている可能性があります。最初の例では、アニメーションを実行する前にself.image(イメージを保持する)を設定しています。 CachedImageへの参照を保持するだけの追加のUIImageホルダープロパティを作成して、ブロックが実行されたときにスティックするようにしてください。

+0

ブロック実行前に 'self.retainedImage = cachedImage'を呼び出すことで、提案したように追加のホルダープロパティを追加しようとしました。しかし、私はまだメッセージを受け取りました: - [UIViewAnimationState retain]:解放されたインスタンスにメッセージが送られました。 (元の投稿にcachedImageを作成した方法のコードを追加しました。) –

1

私の場合、アニメーションブロックが正常に機能した後に画像プロパティnilを作成します。

関連する問題