由于同步操作的一部分,我抢了很多使用NSSession对象API数据所推荐的this answer:IOS:API调用后,可能会更新到核心数据在后台线程?
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *data = [session dataTaskWithURL:dataUrl completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// use `Data` here
if (data !=nil) {
[self processData:data];//this currently includes saving to CoreData
}
// finally, any UI/model updates should happen on main queue
dispatch_async(dispatch_get_main_queue(), ^{
//do what you want with data
NSLog(@"back in main queue");
if (data==nil) {
NSLog(@"no data from api");
}
else {
[self.tableView setNeedsDisplay];
[self.tableView reloadData];
}
});
}];
[data resume];
我的问题是,是没关系的数据CoreData保存在后台线程,还是在完成块/主线程中做得更好?现在我正在后台线程中执行它。然而,在tableview完全加载之前以及作为故障排除的一部分之前,存在很长的延迟 - 我想这可能是问题所在。
谢谢你的建议。
好的。听起来像一只熊。我做了大量的处理,看起来像我将不得不花费大量的时间来整理哪些MOC正在使用。 – Arjun
要确认,processData应该在上面显示的位置? – Arjun
对,与许多MOC一起工作可能会很痛苦。但搞清楚哪一个被使用很容易,因为每个MO都有一个(弱)参考MOC。所以除非你和你的MOC交易过,否则你可以参考任何给定的MO的MOC。 –