NSOperationQueue がすべてのタスクを終了したときに通知を受け取る
上記の投稿で @porneL が投稿したものと同じ問題があります。@NickForge が投稿したソリューション (57 票を獲得したソリューション) を試しましたが、うまくいかないため明らかに間違っています。問題のセットアップと私の実装は次のとおりです。
一連の Web サービス操作を開始する前にスピナーを開始し、完了したらスピナーを停止する必要があります。Web サービスは、共有AFHTTPClient
インスタンス (AFNetworking パッケージの一部) を介して呼び出され、NSOperationQueue
.
データの読み込みが開始される ViewController にオブザーバーを設定しました。上記の投稿の回答を使用してこれを行いました。私の VC での実装は次のようになります。
私のViewControllerのinit
メソッドでは:
//add WelcomeVC as an observer for AFHTTPClient dataloadOps notifications
[[[MyCustomAFHTTPClient sharedClient] operationQueue] addObserver:self forKeyPath:@"DataLoaderEvent" options:0 context:NULL];
私のViewControllerのobserveValueForKeyPath
メソッドでは:
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if( (object == [[MyCustomAFHTTPClient sharedClient] operationQueue])
&& [keyPath isEqualToString:@"DataLoaderEvent"]) {
if ( [[[MyCustomAFHTTPClient sharedClient] operationQueue] operationCount] == 0) {
NSLog(@"EUREKA!!! QUEUE IS EMPTY! DATALOAD HAS COMPLETED!");
}
}
}
ただし、ViewController のobserveValueForKeyPath
メソッドは呼び出されません。
これを機能させるための助けがあれば、スピナーの実装を完了することができます。