2012-04-13 9 views
0

マイViewController1がViewController2はのUITableViewを持って iPhone:のUITableViewのデリゲートはViewControllerをがリリースされた後

ViewController2

ViewController2 *controller = 
    [[ViewController2 alloc] init]; 
[self.navigationController pushViewController:controller 
    animated:NO]; 
[controller release]; 
をプッシュ生きている... XIBファイルで、私はファイルの所有者とデリゲートを接続します。またViewController2は、ボタンを行っている

- (IBAction)doneButtonPressed { 
    [self.navigationController popViewControllerAnimated:NO]; 
} 

問題が同時にテーブルの行と完了]ボタンをクリックした場合、時々didSelectRowAtIndexPathがあることである:それViewController2がポップされた後にメソッドが呼び出されます、と私はSIGABRTエラーやロガーでこの事を持っています:

[__NSCFSet tableView:didSelectRowAtIndexPath:]: unrecognized selector sent to instance 0x62579d0' 

したがって、viewController2をポップした後にtableView:didSelectRowAtIndexPathを呼び出す方法はありますか?それは

答えて

2

一つの簡単な修正はこれを行うことです...死んでいる必要があります。

- (IBAction)doneButtonPressed { 
    self.tableView.delegate = nil; 
    [self.navigationController popViewControllerAnimated:NO]; 
} 

あなたは、そのビューを残している間は、よりデリゲートの呼び出しが発生することを保証しないこの方法。また、ビューコントローラのdeallocメソッドでこれを行うこともできます(恐らく、より良い場所です)。

+0

はい、これは私がそれをどのように修正したかの方法です。しかし、私はちょうどそれがなぜそうであるか知りたいです。とにかく応答に感謝 – Jim

1

popViewController & メソッドは、タスクを非同期に実行します。アニメーションブロックを使用してviewControllerをスライドさせたりスライドさせたりします。 ViewControllerはスーパービューから削除され、アニメーションブロックの完成部分で解放されます。クラッシュはこの遅れのためです(私は0.3秒と思います)。

関連する問題