【问题标题】:Asynchronous download an object property异步下载对象属性
【发布时间】:2012-05-04 04:35:17
【问题描述】:
我正在 iOS 平台上编写提要阅读器,在解析 json 结果时,我创建了一个数组,其中包含代表每个提要的对象。这些对象将被连续推送到 NSTableView 或地图(它们具有地理定位信息)。有时会发生feed没有返回位置信息,而是返回地点的foursquare Id,所以我不得不联系foursquare服务器获取信息。
最好的方法是这样做吗? (我很想知道数组中的所有提要何时检索到他们的信息,所以我可以将所有内容推送到地图和表格视图中)
谢谢
【问题讨论】:
标签:
iphone
objective-c
ios
asynchronous
【解决方案1】:
您可以创建一个 NSOperationQueue 并添加操作以从服务器获取信息,然后观察队列的“操作”键路径。当 operations.count == 0 时,推送到 map 和 tableview。
编辑:
您本身并没有进行轮询 - 您正在观察属性并接收任何更改的通知。
将自己添加为队列操作属性的观察者。
[self.runningQueue addObserver:self forKeyPath:@"operations" options:0 context:NULL];
然后执行以下操作:
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
{
if (object == self.runningQueue && [keyPath isEqualToString:@"operations"]) {
if ([self.runningQueue.operations count] == 0) {
// push to table view and map view
}
}
else {
[super observeValueForKeyPath:keyPath ofObject:object
change:change context:context];
}
}
见this thread。