NSOperationをキャンセルすると(ユーザーがボタンを押したとき)、キャンセルメソッドがメインスレッドから呼び出されますが、操作が別のスレッドで実行されていることは明らかです。 したがって、_isExecutingと_isFinishedを変更したときの競合状態を回避するために、キャンセル(または少なくともロジック)をNSOperationと同じスレッドから呼び出す必要があります。それとは別に、ユーザーがファイルを取り消すと、いくつかのファイルが削除され、時間がかかります。キャンセルはメインスレッドから呼び出されるため、すべてのアプリがしばらく応答しなくなりますが、これは醜いことです。操作と同じスレッドでNSOperationをキャンセルするにはどうすればよいですか?
現在のNSOperationと同じスレッドでキャンセルコードを実行するにはどうすればよいですか?
Iが(私はASIHTTPRequestで見たものと同様)、この中にキャンセルしようとした:
if (_operationThread) {
[self performSelector:@selector(cancelOnRequestThread) onThread:_operationThread withObject:nil waitUntilDone:NO];
} else {
[self cancelOnRequestThread];
}
そして_operationThreadを使用して起動方法でsettedさ: _operationThread = [NSThread currentThread]。
しかし、動作しません。
アイデアやご提案はありますか?
注:私は同時操作を使用しているので、mainの代わりにstartを使用します。
ありがとうございました。 Ricardo。