呼び出される理由 message sent to deallocated instance 0xebba1b0
は理解できます。これは、メモリに存在しなくなったオブジェクトにメッセージを送信しているためです。
これが私のシナリオです。UITableViewを含むZoomedViewControllerがあります。UITableViewにはカスタムUITableViewCellがあり、サブビューとして属性付きラベルがあります。属性付きラベルでリンクが押されると(これによりdidSelectRowAtIndexPathがトリガーされます)、MainViewControllerに委任され、MainViewControllerのメソッドcloseZoomedImageVCが呼び出されます。
-(void) closeZoomedImageVC
{
[self.zoomedImageContainer_ removeFromParentViewController];
[self.zoomedImageContainer_.view removeFromSuperview];
}
問題は、そのdidSelectRowAtIndexPathがトリガーされたときに、zoomedImageContainer_がすでになくなっていることです。では、どうすればこれを解決できますか?
ポイントをよりよく説明するために、基本的に私がするとき:
[self performSelector:@selector(closeZoomedImageVC) withObject:nil afterDelay:1.0];
これはもうクラッシュを引き起こしませんが、ハッキーなのでこれは解決策ではありません。これにより、割り当てが解除される前に、didSelectRowAtIndexPathが最初に実行されます。