3

NSOperation A と NSOperation B があるとします。B は、A.completionBlock呼び出されて終了した結果として A が終了し、セットアップを実行することに依存しています。これは、B.addDependency(A)A が終了するまで B を構築できないため、 を使用できないことを意味します。したがってA.waitUntilFinished()、B を構築して開始する前に別のスレッドで使用することを選択します。

ただし、A の completionBlock は別のスレッドで呼び出されるため、ブロックを解除する前に呼び出したスレッドA.waitUntilFinished()実行 A.completionBlockを終了しているため、B の構築時に必要な前提条件が完了していません。

Apple NSOperation API は がディスパッチされる場所を制御できないため、A.completionBlockこの問題を処理する通常の方法は何ですか?

編集:

これまでに試したオプションは、NSOperation B を NSBlockOperation C でラップし、C.addDependency(A)A が終了するまで B が構築されないように呼び出すことです。ただし、NSBlockOperation C 内で非同期開始を呼び出す必要があり、完了ブロックが別のスレッドに飛ぶため、これでも問題は解決しません。

4

1 に答える 1

0

あなたがしたいのは、モデル 1 の uuid がわかったらモデル 2 を保存することなので、それらの用語でそれを表現し、モデル 2 にモデル 1 の uuid を観察させて (または通知を使用して)、操作 B を開始させてください。バリューセット?

于 2014-07-09T21:52:30.347 に答える