简要介绍一下我在做什么:我有两个数组,它们都包含 50% 的表格视图信息。为什么?因为其中一个阵列从互联网上提取当前信息,而另一个阵列保存了用户数据。我不知道如何以一种不混乱的方式从互联网上获取当前信息,因为我是 Objective-C 的业余爱好者,更不用说在 Objective-C 中建立网络了。无论如何,因此互联网数组正在使用 AFNetworking 提取与已保存数组(保存在核心数据中)中的对象相对应的信息。因此它是我想要的异步的。现在问题来了,或者至少我可以从这种情况中得到什么。
我正在做一个 for 循环,它有效地计算保存数组中的对象并传递每个对象的唯一 ID,以便可以下载、解析来自 Internet 的相应信息并将其添加到 Internet 数组中。但是,由于网络是异步的,因此循环实际上是一次从 Internet 下载所有信息。因此,对象将按照先下载的顺序写入互联网阵列。因此 savedArray[0] 不对应于 internetArray[0] 中的对象。正如您可以想象的那样,这是一个相当大的缺陷,因为当我将值插入到我的 tableView 中时,没有什么真正匹配/有意义。
我真的在寻找一种方法来推迟信息的下载,直到之前的下载完成并添加到 internetArray,我到底该怎么做?现在是代码。这是我获得适当密钥的地方:
for ( int i = 0; i < [mySavedObjects count]; i++) {
MySavedObject* mySavedObject = [mySavedObjects objectAtIndex:i];
[self retrieveMissingInformation: myObject.Id];
[self.tableView reloadData];
}
这是我实际获取信息的地方(为了空间而简化):
- (void)retrieveMissingInformation:(NSString *) Id
{
// create URL here.
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"Success");
// Do some safety checks & parse the JSON, returning a searchResult.
[searchResults addObject:searchResult];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
// Do some error messages etc.
}];
[queue addOperation:operation]; //where queue is an ivar NSOperationQueue.
}
最后,在 cellForRowAtIndexpath 中,我使用了这两个:
MySavedObject *mySavedObject = [mySavedObjects objectAtIndex:indexPath.row];
&
SearchResult *searchResult = [searchResults objectAtIndex:indexPath.row];
获取单元格的值。
对不起,巨大的文字墙。我真的不够好,无法有效地解释事情,经常在术语上结结巴巴,不得不求助于自己的例子。订购这个烂摊子的任何帮助,我将不胜感激。
问候,
迈克。