iOS 8 CoreData问题'NSInternalInconsistencyException',原因:'recordChangeSnapshot:forObjectID :: global ID在录制时可能不是临时的'

Wae*_*ael 4 core-data objective-c ios8

在将我的应用程序从iOS7迁移到iOS8时,我遇到了解决此问题的真正困难,该应用程序在iOS7上运行良好.

当我想保存时它会崩溃

NSError *error = nil;
if (![managedObjectContext save:&error]) {  <---- crashes here
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
 }
Run Code Online (Sandbox Code Playgroud)

我在stackoverflow上只看到了2个类似的问题,但没有一个响应与我的问题有关.

iOS 8 CoreData问题:recordChangeSnapshot:forObjectID :: global ID在录制时可能不是临时的

iOS 8核心数据问题:录制时全局ID可能不是临时的

发布所有代码并不容易.我不知道从哪里开始调试!请帮忙一些.谢谢

pka*_*amb 10

这个调用是[managedObjectContext save:&error]在后台线程上发生的吗?它通常在主线程上调用吗?

建议使用Core Data进行并发编程的模式是线程限制:每个线程必须拥有自己的完全私有的托管对象上下文.

使用Core Data代码时,您可以使用isMainThread以确定是否在后台线程上并在使用Core Data之前切换到主线程:

- (void)yourCoreDataTask {
    if (![[NSThread currentThread] isMainThread]) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self yourCoreDataTask];
        });
        return;
    }

    // Now on the Main Thread. Work with Core Data safely.
}
Run Code Online (Sandbox Code Playgroud)