3

だから私はこれについて数日間考えていましたが、それを機能させる良い方法を見つけることができないようです.

一度に 1 つのNSOperationQueue操作しかできない があります。私はドキュメントから理解しています:

OS X v10.6 以降では、操作をキャンセルすると、操作が依存関係を無視するようになります。この動作により、キューは操作の開始メソッドをできるだけ早く実行できます。次に、start メソッドは操作を終了状態に移動し、キューから削除できるようにします。

キャンセルを送信するとisCancelledYESに設定されますが、私の問題は次のとおりです。

キューに20NSOperationがあり、18日をキャンセルしたところ、NSOperationQueue実行できるようになり、終了したと表示されるまで残ります(私のNSOperationチェックは正しくisCancelledあります)が、キューにとどまると、何かUITableViewに設定した にもとどまりますdataSourceのようにmyOperationQueue.operations

それが私を悩ませていることです。ユーザーはクリックしてメソッドCancelを呼び出しますが、操作はまだキューにあるため表示されます。cancelNSOperation

startメソッドで呼び出すことを考えましたcancelが、キューだけができるわけではありませんstart

編集:私もオーバーライドしようとしisFinishedましたcancel:

[self willChangeValueForKey:@"isFinished"];
_isFinished = YES;
[self didChangeValueForKey:@"isFinished"];

それは機能しますが、キューstartの次のものにも送信され、同時に2つになる可能性があり、1つだけが必要です。NSOperationNSOperation

4

1 に答える 1

5

したがって、私が正しく理解している場合、未処理の操作のリストは UITableView へのデータ ソースです。

1 つの解決策は、キャンセルされた操作を削除するために、操作のリストをフィルター処理することです。テーブル ビューのデータ ソースは、操作の生のリストではなく、このフィルター処理されたリストになります。

于 2013-01-19T19:32:08.173 に答える