私はNSOperationをNSOperationQueueで実行しています。 NSOperationはいくつかのデータをダウンロードし、NSDictionaryに解析します。 NSOperationがいつ終了し、その辞書を入手するのかを私はどのように知っていますか?おかげさまで NSOperation finished
答えて
通常は、操作が完了したことを知る必要があるオブジェクトをNSOperationメソッドで呼び出すことです。あるいは、NSNotificationCenterを使用して、さまざまなオブジェクトがより分散的な方法で更新をリッスンできるようにすることができます。または、NSOperationのisFinished
プロパティでKVOを聞くことができます。
NSOperationをデリゲートで初期化することをお勧めします。 NSOperationが仕事を終えると、彼はデリゲートのメソッド(プロトコルで宣言されている)を使ってデリゲートを呼び出します。
またNSOperation
の- (void)setCompletionBlock:
を使用することができます。
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"Doing something...");
}];
[operation setCompletionBlock:^{
NSLog(@"Doing something once the operation has finished...");
}];
[queue addOperation:operation];
多くの詳細hereを。
完了ブロックがどのスレッドで実行されるかについては、(1)と(2)の保証がないことに注意することが重要です。ドキュメンテーションは、これらの問題をより詳細に説明します。もちろん、完了ブロックは、操作が終了した後に実行されます。それが実行される正確な瞬間(順序)は不確実です。 –
自体NSOperationで操作が終了したときに知っておく必要のあるコードのブロックは、その後、あなたは優雅にそれらの間の依存関係を確立することにより、これを扱うことができる場合:
[laterOp addDependency:downloadAndParseOp];
laterOpは後にのみ実行されます
downloadAndPareOpが終了しました。
実際、このアプローチが可能なようにコードを記述することをお勧めします。 NSOperationsとNSOperationQueueの最大の強みの1つは、コード実行を容易に調整できることです。
ダウンロードの最大の問題は、NSURLSessionを使用している場合、操作が非同期になることです。すなわち操作が完了し、しばらくしてダウンロードが完了する。回避策:NSURLSessionを同期化するか、NSOperationをサブクラス化して、ダウンロードが完了した後に 'isFinished'を設定するだけです。 –
- 1. PHPMailer store finished mail
- 2. youtube video finishedイベント
- 3. ASINetworkQueue NSOperationブロッキングメインスレッド内
- 4. コールNSOperation
- 5. NSOperationとCoreDataスレッディング
- 6. コアデータとNSOperation
- 7. NSTimer in NSOperationサブクラス
- 8. FMDatabaseとNSOperation
- 9. NSOperation in global queue
- 10. NSOperation with repeat option
- 11. モーダルNSAlert from NSOperation
- 12. 単体テストNSOperation?
- 13. NSFetchedResultsControllerとNSOperation
- 14. NSOperation、開始対メイン
- 15. NSOperationをリセットする
- 16. NSOperationから次のNSOperationにデータを渡す
- 17. "Finished、saved cache"中にIntelliJ IDEAがハングアップ
- 18. NSOperationに優しいメソッドを書く
- 19. Firebase非同期コールバックNSOperationに戻っていない
- 20. AFNetworking 3.0 AFOTPSessionManager(NSOperationを使用)
- 21. NSOperation to all runs結果
- 22. NSOperationを同期させる
- 23. 非同期NSURLConnectionとNSOperation - キャンセル
- 24. 2017/Swift 3.1 - GCDとNSOperation
- 25. NSOperatioQueueによるNSOperation保持
- 26. NSOperation + Objective-Cカテゴリ=悪いアイデア?
- 27. 派遣キューとNSOperationキュー
- 28. 非同期NSURLConnection with NSOperation
- 29. NSOperation VS GCD for Core-Data
- 30. スウィフト3追加@esaping属性はNSOperation
返信いただきありがとうございます。私はこの操作が別のスレッドにあるので動作しないと思いましたが、これを試してみましょう。 – user635064
あなたは別のスレッドにいるという事実に問題はありません。あなたのメッセージはあなたの代理人に届きます。 –