【问题标题】:Deleting Managed Objects in Background Block删除后台块中的托管对象
【发布时间】:2010-08-17 08:18:50
【问题描述】:

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

有人可以帮忙吗?

【问题讨论】:

    标签: iphone core-data nsthread objective-c-blocks


    【解决方案1】:

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

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

    Core Data Books: RootController.m 有一个很好的例子来说明如何做到这一点。该文件相当长。查找mergeChangesFromContextDidSaveNotification: 并阅读详细的 cmets。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多