これを説明しようとしている間、我慢してください。
UITableViewCell 内に HJManagedImageV のインスタンスがあります。必要なプロトコル (HJManagedImageVDelegate) を実装する UIVIewController である self にコールバックを設定します。
このコントローラーからすぐに移動すると、コールバックは、もはや存在しないオブジェクトで最終的に起動されます。(HJManagedImageV はそのデリゲートを保持します。)
問題は、コールバック内で、EXC_BAD_ACCESS を取得しないとオブジェクトが有効かどうかを確認できないことです。
-(void)managedImageSet:(HJManagedImageV*)mi {
mi.callbackOnSetImage = nil;
if(mi != nil && mi.image != nil) { // EXC_BAD_ACCESS when checking mi.image
[mi setImage:[mi.image roundedCornerImage:9 borderSize:0]];
}
}
クラッシュ時の mi は次のとおりです。
mi HJManagedImageV * 0x0022fae0
UIView UIView
oid id 0x00000000
url NSURL * 0x00000000
moHandler HJMOHandler * 0x00000000
image UIImage * 0x00000000
imageView UIImageView * 0x00000000
callbackOnSetImage id 0x00000000
callbackOnCancel id 0x00000000
callbackOnError id 0x00000000
isCancelled BOOL false
loadingWheel UIActivityIndicatorView * 0x00000000
onImageTap NSInvocation * 0x00000000
index int -1
modification int 0
なぜ mi.image をチェックするとクラッシュするのか不思議です。mi がまだ使用可能かどうかは、他にどのように判断できますか?