0

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メソッドは呼び出されません。

これを機能させるための助けがあれば、スピナーの実装を完了することができます。

4

2 に答える 2

4

operationQueue には DataLoaderEvent というプロパティがありますか? 通常、NSOperationQueue の「operationCount」プロパティを監視します。

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html#//apple_ref/doc/uid/TP40004592を参照してください。

「NSOperationQueue クラスは、キー値コーディング (KVC) およびキー値監視 (KVO) に準拠しています。アプリケーションの他の部分を制御するために、必要に応じてこれらのプロパティを監視できます。監視できるプロパティには、次のものがあります。

操作 - 読み取り専用プロパティ

operationCount - 読み取り専用プロパティ"

于 2013-01-22T23:55:23.990 に答える
-1

これを試して:

[operation setCompletionBlock: ^{
    NSLog(@"Finished an image.");
}];
于 2013-02-19T15:56:28.073 に答える