【发布时间】:2011-12-23 16:45:30
【问题描述】:
我的应用中有一项操作需要使用 Core Data 进行大的、有时是几秒钟的更新。因为我想做的不仅仅是显示一个微调器,我想向最终用户显示一个进度条。然而,这带来了一些问题,因为 Core Data 坚持在主线程上运行。我试图将 Core Data 放在带有 dispatch_async 的后台线程上,结果是灾难性的。问题是 UIKit 也想在主线程上运行,更糟糕的是,它只在当前线程结束后才更新。这会导致进度条仅在完成所有处理后才会更新!
如何更新 UI 并安全地更新我的数据?
NSArray* items = [[response.data objectForKey:@"result"] objectForKey:@"items"];
NSManagedObjectContext* context = [RBGameItemController sharedInstance].managedObjectContext;
int itemCount = [items count];
for (int i = 0; i < itemCount; i++) {
float progress = ((float)i/(float)itemCount)*0.95f;
self.progressView.progress = 0.5f + progress;
id item = [items objectAtIndex:i];
[GameItem gameItemFromDictionary:item inManagedObjectContext:context];
}
NSError* error = nil;
[context save:&error];
【问题讨论】:
标签: iphone multithreading core-data