UITableView を使用していくつかの文字列メッセージを表示しています。また、NSOperationQueue を使用して、バックグラウンド スレッドでメッセージを取得するカスタマイズされた NSOperation を保持しています。1 つのメッセージが正常に取得されると、カスタマイズされた NSOperation が UITableView コントローラーに通知して表示します。
すべてのメッセージが読み込まれた後、ナビゲーション バーの戻るボタンをクリックして UITableView から他のビューに切り替えると、すべて問題ありません。しかし、メッセージがまだロードされている間に戻るボタンをクリックすると、EXC_BAD_ACCESS がスローされます。カスタマイズされた NSOperation がperformSelectorOnMainThread
メソッドで UITableView コントローラーに通知しているときに例外が発生したことを確認しました。ビューを切り替えた後、ターゲットの UITableView コントローラーは無効ではないように聞こえますが、Navigation Controller は View Controller インスタンスを保持すると思います。この問題を解決する方法を教えてください。ありがとう。
カスタマイズされた操作は、次のコードを使用して UITableView コントローラーで初期化されます。
StatusMessageLoadingOperation *operation = [[StatusMessageLoadingOperation alloc]
initWithData:person
messageArray:cachedStatusMessages
target:self
action:@selector(didFinishStatusMessages:)];
[operationQueue addOperation:operation];
[operation release];
カスタマイズされた NSOperation クラスは、次のコードで UITableView を更新します。
- (void)main{
for (int i = 0; i < [[person statusMessages] count]; i++) {
[target performSelectorOnMainThread:action withObject:messageArray waitUntilDone:NO];
}
}