当 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
方法永远不会被调用!
非常感谢任何帮助来完成这项工作,这样我就可以完成微调器的实现。