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 回答