在iPhone上,我尝试在后台删除托管对象:
- (void) cleanUp {
dispatch_queue_t queue_cleanUp;
queue_cleanUp = dispatch_queue_create("com.aroundcal.cleanup", NULL);
dispatch_async(queue_cleanUp, ^{
while (!self.stopThread) {
[self deleteMyObjects];
[NSThread sleepForTimeInterval:30];
}
});
dispatch_release(queue_cleanUp);
}
在deleteObjects
中,我使用单独的managedObjectContext。如果我从用户界面中删除了其中一些对象,那么如果cleanUp
线程在后台运行,应用程序就会崩溃。
错误是故障不能完全填满。
有人可以帮忙吗?
答案 0 :(得分:1)
您正在崩溃,因为前台上下文不知道后台上下文已从持久性存储中删除了对象。当前台上下文尝试在已删除的对象中发生故障时,它会崩溃。
您需要将后台线程上下文中所做的更改与前台线程的上下文合并。您需要将前景上下文注册为后台上下文的观察者,以便它可以在尝试在任何新对象中发生故障之前自行更新。
Core Data Books: RootController.m就是如何做到这一点的一个很好的例子。该文件相当长。查找mergeChangesFromContextDidSaveNotification:
并查看详细注释。