7

私はそれNSOperationQueueにいくつかを持ってNSOperationsいます(NSInvocationOperations特に)。この操作は、いくつかの計算を実行し、それに応じて(もちろん、を介して)UI要素の状態を変更performSelectorOnMainThread:...します。多くの場合、アニメーションを使用します。

私のUIには、UINavigationViewControllerと、別のビューに移動するためのいくつかのボタンがあります。そのため、計算/アニメーションの進行中に、ユーザーは現在のビューを離れることができます。そして、私が必要としているのは、ユーザーが現在のビューに戻るまで、これをなんとかして停止することです。

私が見つけた唯一の解決策は、スレッドセーフなブールフラグを作成し、それをすべてのスレッドでチェックすることです(while!flag sleep_for_some_time;など)。もっと良いものはありますか?

4

1 に答える 1

13

質問は少し曖昧なので、実行中のすべてのコードを知らずに言うのは難しいです。そうは言っても、私は次の方法で問題に取り組むことができます。

オプション1.NSOperationのサブクラスに、独自のアトミックKVOプロパティ「isPaused」を追加します。操作自体の中で、そのプロパティを観察し、変更された場合はそれに応じて処理します。

オプション2.操作キュー自体を一時停止したことはありますか?その場合は、操作内からそのプロパティを監視することを検討してください。その値が変更された場合は、それぞれが独立してアクションを実行できます。

オプション3.キュー内のすべての操作をキャンセルし、ビューが再び表示される場合は、新しい操作で再開するだけです。

ただし、全体として、すでに進行中の操作を一時停止するための特効薬はありません。あなたはあなた自身の解決策を焼く必要があるでしょう。ただし、ダメージはそれほど悪くないはずです。

于 2010-10-15T20:14:46.443 に答える