ios - 核心数据 : statement is still active

标签 ios core-data

我的应用程序出现以下错误:

CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. statement is still active with userInfo (null)

我能找到的所有内容似乎都表明我的核心数据管理对象上下文可能存在多线程问题,但我似乎无法在我的应用程序中的任何地方找到这种情况。我正在后台线程上访问和管理托管对象上下文。上下文仅在该后台线程上获取和操作对象。当我检测到通过 NSManagedObjectContextObjectsDidSaveNotification 保存到该上下文时,我将更改合并到我只能在主线程上访问的不同上下文中。当我调用合并更改时,抛出错误。即使使用相同的数据集,这种情况也很少发生。

我在某处读到可以使用“-com.apple.CoreData.ThreadingDebug 3”来“启用多线程断言”,但我无法让它工作。 有谁知道这是否可能?我希望这可能会开启一些断言,帮助我找到我在错误线程或其他东西上玩上下文的位置。

关于可能发生的事情或如何追踪此类问题的任何其他线索?

最佳答案

我遇到了类似的问题,并找到了解决方法。

我创建了一种机制,可以根据线程名称创建不同的上下文(1 个线程 = 1 个上下文)。

#include <pthread.h>
...

    mach_port_t threadID = pthread_mach_thread_np(pthread_self());
    NSString *threadName = [NSString stringWithFormat:@"%x", threadID];
    NSManagedObjectContext *context = [singleton.threadsContexts objectForKey:threadName];
    if (!context) {
        NSLog(@"Creating managed context for thread named '%@'", threadName);
        context = [[NSManagedObjectContext alloc] init];
        [context setPersistentStoreCoordinator:[singleton.managedObjectContext persistentStoreCoordinator]];

        //initialize dictionary in your singleton if it as not been yet
        if(!singleton.threadsContexts)
        {
            singleton.threadsContexts = [NSMutableDictionary new];
        }
        [singleton.threadsContexts setObject:context forKey:threadName];
    }

    return result;

然后,当我在后台线程中需要一个完整版本的托管对象时,我会得到一个专用于该线程的对象的副本:

NSManagedObjectModel *myNewObject = [myBackgroundContext objectWithID:[myObject objectID]];

希望这个回答对您有所帮助。

关于ios - 核心数据 : statement is still active,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883746/

相关文章:

iOS JSON 解析错误

android - 如何确定我运行项目的环境?

iphone - 为什么我无法将 NSSet 保存到 coredata 中的 'to-many' 关系?

objective-c - `ordered` 标志在一对多关系中的作用是什么?

ios - 如何在 Swift 4 中使用 FetchedResultsController 获取 DateSectionTitles

core-data - NSPersistentStoreDidImportUbiquitousContentChangesNotification 替换?

ios - 类型 'String' 的值没有成员 'stringByAppendingPathComponent'

ios - 日期到毫秒并在 Swift 中返回日期

ios - 更新 pod 依赖项时库搜索路径被删除

ios - 路径上的数据模型编译失败-xcode 6