Get notification when NSOperationQueue finishes all tasks
我和@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
方法永远不会被调用!
任何帮助实现这项工作都将非常受欢迎,因此我可以完成实现微调器。
答案 0 :(得分:4)
operationQueue是否有一个名为DataLoaderEvent的属性?通常,一个人监视NSOperationQueue的“operationCount”属性。
“NSOperationQueue类是键值编码(KVC)和键值观察(KVO)兼容。您可以根据需要观察这些属性以控制应用程序的其他部分。您可以观察到的属性包括:< / p>
操作 - 只读属性
operationCount - 只读属性“
答案 1 :(得分:-1)
试试这个:
[operation setCompletionBlock: ^{
NSLog(@"Finished an image.");
}];