1

NavigationController のサブビューから NSOperation を呼び出しています。

MyOperation *op = [[MyOperation alloc] target:self action:@selector(didFinishOperation)];

Operation は、サーバーからいくつかのデータをロードし、それを解析してから、

[target performSelectorOnMainThread:action withObject:nil waitUntilDone:YES];

仕事が終わったら。これは一般的に機能しています...

問題は、NSOperation がジョブを実行しているときにナビゲーション コントローラーから戻るボタンを押すと、アクションが割り当て解除されたインスタンスを参照するため、アプリがクラッシュすることです。

操作を保持しようとしましたが、それでもクラッシュします...

前もって感謝します

4

2 に答える 2

4

クリスは正しい方向に進んでいますが、キャンセルしようとして操作が完了した場合はカバーされておらず、それでもクラッシュします。で操作を実行している場合main、キャンセルは有効になりません。

それでも、ターゲットが破棄される前にキャンセルしてみてください。ただしtarget、メッセージを送信する前に、まだ存在することをテストしてください。また、メッセージを送信する前に、キャンセルされているかどうかを確認してください。

if ( self.isCancelled ) return;
于 2009-11-14T08:16:48.153 に答える
0

UIViewのdeallocメソッドで、操作をキャンセルしてNSOperationQueueから削除できます。

于 2009-11-14T08:05:06.510 に答える