【发布时间】:2014-04-11 18:16:59
【问题描述】:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (NSDictionary* info in houses) {
House* house = [DataManager processJSON:info]; //this method processes JSON into Core Data objects and saves them
[self.data addObject:house];
}
dispatch_async(dispatch_get_main_queue(), ^{
//update the UI based on the new House objects added to the data array
});
});
My House 对象有时会起作用,但通常会出人意料地以这样的方式结束:
<House: 0x17f8b420> (entity: House; id: 0x17f71e90 <x-coredata://2826DE3A-1762-4958-8402-541D2B1754FA/House/p219> ; data: <fault>)
我相信这与在后台线程上处理 Core Data 对象有关,从而导致某种上下文冲突。但是我找不到很多将 Core Data 与 GCD 结合使用的具体示例。关于我可以在此处添加什么以确保对象没有故障的任何建议?
【问题讨论】:
-
你的主线程上下文是后台线程的父上下文吗?如果是这样,您需要保存后台线程上下文,以便将更改传播到父主上下文。
-
这个问题是否仅限于打印对象?如果您的代码尝试访问其中一个属性值,它们是否可用?
标签: ios multithreading core-data grand-central-dispatch nsmanagedobjectcontext