[解決済み] NSOperationQueueが全タスクを終了したら通知を受ける
2023-02-19 01:31:34
質問
NSOperationQueue
は
waitUntilAllOperationsAreFinished
がありますが、同期的に待ちたいわけではありません。キューが終了したら、UIにプログレスインジケータを隠したいだけなのです。
これを達成するための最良の方法は何でしょうか?
私は、自分の
NSOperation
からの通知は、どれが最後になるかわからないし
[queue operations]
は、通知を受け取ったときにまだ空でない (あるいはもっと悪いことに再入力される) かもしれないからです。
どのように解決するのですか?
KVOを使用して
operations
プロパティをチェックすることで、キューが完了したかどうかを知ることができます。
[queue.operations count] == 0
.
KVOを行うファイルのどこかで、KVOのためのコンテキストを次のように宣言します ( 詳細情報 ):
static NSString *kQueueOperationsChanged = @"kQueueOperationsChanged";
キューをセットアップするときは、こうしてください。
[self.queue addObserver:self forKeyPath:@"operations" options:0 context:&kQueueOperationsChanged];
そして、これを
observeValueForKeyPath
:
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
{
if (object == self.queue && [keyPath isEqualToString:@"operations"] && context == &kQueueOperationsChanged) {
if ([self.queue.operations count] == 0) {
// Do something here when your queue has completed
NSLog(@"queue has completed");
}
}
else {
[super observeValueForKeyPath:keyPath ofObject:object
change:change context:context];
}
}
(これは、あなたの
NSOperationQueue
という名前のプロパティに
queue
)
オブジェクトが完全に解放される前のある時点で(またはキューの状態を気にしなくなった時点で)、このようにKVOから登録を解除する必要があります。
[self.queue removeObserver:self forKeyPath:@"operations" context:&kQueueOperationsChanged];
追記:iOS 4.0には
NSOperationQueue.operationCount
プロパティがあり、ドキュメントによると、KVO に準拠しています。しかし、この回答は iOS 4.0 でも動作するため、後方互換性のためにまだ役に立ちます。
関連
-
[解決済み] Mobile Safariで電話番号のリンクを無効にする方法を教えてください。
-
[解決済み] UIPageControlのページネーションドットの色を変更するにはどうしたらよいですか?
-
[解決済み] UITextFieldのキーボードの種類をプログラムで変更する
-
[解決済み] iPhoneでウェブページからアプリがインストールされているかどうかを確認する方法
-
[解決済み] UIButton: 選択されたハイライト状態の画像を設定する
-
[解決済み] iPhone Safari ウェブアプリでリンクを新しいウィンドウで開く
-
[解決済み] ITunesのレビューURLとiOS 7(ユーザーにアプリを評価してもらう)AppStoreに空白のページが表示される。
-
[解決済み] Mac OS Xのスタティック・ライブラリ(.a)のターゲット・アーキテクチャはどのように決定するのですか?
-
[解決済み] iPhone 5 CSSメディアクエリ
-
[解決済み] all_loadリンカーフラグは何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UITextViewのキーボードをリターンキーで解除するには?
-
[解決済み] Mobile Safariで電話番号のリンクを無効にする方法を教えてください。
-
[解決済み] iOSの配布証明書の正しい更新方法
-
[解決済み] エラー : サービスは無効です
-
[解決済み] iOSアプリでドキュメントフォルダ内にフォルダを作成する
-
[解決済み] UISearchDisplayController/UISearchBarでNSFetchedResultsController(CoreData)をフィルタリングする方法
-
[解決済み] オプションのメソッドを持つプロトコルを作成するには?
-
[解決済み] iPhone-Portrait-NumberPadキーボードでタイプ4をサポートするキープレインが見つからない; 3876877096_Portrait_iPhone-Simple-Pad_Defaultを使用
-
[解決済み] UITableViewのセクションヘッダーのデフォルトの高さ
-
[解決済み] iPhoneでNSStringをAES暗号化する方法