1

手動更新の実装に取り​​組んでいます。その更新プロセスには 3 つのステップがあります。それぞれが他の前に完了する必要があります (同期、シリアルなど)。UI をブロックしないように、これらはすべてバックグラウンドで実行する必要があります。

私は3つの方法を個別にテストしましたが、それらはすべて必要なことを行います(サーバーからデータを取得する、データベースを更新するなど)が、すべてのコメントを外して実行すると、最初の方法が完了する前に2番目の方法が開始されます. そして、これを修正する方法がわかりません。NSInvocationOperation3つの方法と設定を試してみましたdependencies。動作しませんでした。試してみqueue.maxConcurrentOperationCount = 1ました。動作しませんでした。

最初のメソッドは他のメソッドを呼び出し、その過程で別の s を作成する他のものを呼び出すthreadので、それが問題ですか? そうなったら、手術は終わったと思いますか?NSOperation複雑すぎませんか?「これを行い、完了するまでこれを行わないでください」と言うより簡単な方法はありますか?

4

1 に答える 1

3

NSOperationQueue複数のインスタンスを使用しNSOperation、それらの間の依存関係を指定するのが正しいアプローチです。

操作が他のスレッドを作成し、それらが終了するのを待たない場合、操作が終了し、次の操作の実行が開始されるため、問題になります。

非同期で実行される操作は、NSOperationサブクラスで実行する必要があります。このサブクラスはisConcurrent、start/main メソッドが戻った後、操作を維持するために YES を返す必要があります。が YES に変更されると、操作は完了isFinishedです (KVO で監視されるため、変更通知を送信する必要があります)。したがって、非同期プロセスは、完了時に適切な通知を更新して投稿する必要があります。これにより操作が終了し、次の操作を開始できます。

于 2013-08-28T19:46:02.607 に答える