0

在 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线程在后台运行,应用程序就会崩溃。错误是不能完全填充故障。

有人可以帮忙吗?

4

1 回答 1

1

您正在崩溃,因为前台上下文不知道后台上下文已从持久存储中删除了对象。当前台上下文试图在删除的对象中出错时,它会崩溃。

您需要将后台线程上下文中所做的更改与前台线程上下文合并。您需要将前台上下文注册为后台上下文的观察者,以便它可以在尝试在任何新对象中出错之前进行自我更新。

核心数据手册:RootController.m有一个很好的例子来说明如何做到这一点。该文件相当长。查找mergeChangesFromContextDidSaveNotification:并阅读详细评论。

于 2010-08-17T12:27:30.983 回答