CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常

Posted

技术标签:

【中文标题】CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常【英文标题】:CoreData: error: Serious application error. Exception was caught during Core Data change processing 【发布时间】:2013-11-19 04:40:42 【问题描述】:

嗨,我要崩溃了,

当我尝试在后台将 1000 条记录插入 db 时,出现以下异常: CoreData: error: Serious application error。在核心数据更改处理期间捕获到异常。 这通常是

的观察者中的错误
NSManagedObjectContextObjectsDidChangeNotification. -[__NSCFSet addObject:]: attempt to insert nil with userInfo (null)2013-11-19 09:41:19.587 3pTalk[7487:907]

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet addObject:]: attempt to insert nil'

我使用了插入 objexts 的代码

dispatch_queue_t myBackgroundQ = dispatch_queue_create("com.sample.addressbook", NULL);
// Could also get a global queue; in this case, don't release it below.
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC);
dispatch_after(delay, myBackgroundQ, ^(void)
    [self userAddressbook];
);
dispatch_release(myBackgroundQ);
[self performSelectorOnMainThread:@selector(startSyncLoader) withObject:nil waitUntilDone:YES];

【问题讨论】:

实际插入的代码是什么样的。看起来您可能正在尝试将 nil 对象添加到 To-Many 关系或在错误的线程上使用 managedObjectContext。 将数据插入数据库的代码在哪里? 【参考方案1】:

不要在一个上下文中同时从 2 个线程(Main、Background)访问同一个数据库(Persistent Store Coordinator)。不建议这样做。它会导致应用崩溃。

创建 NSManagedContext 对象并设置 persistentstoreCoordinator。

    dispatch_queue_t request_queue = dispatch_queue_create("com.xxx.ScsMethod", NULL);
    dispatch_async(request_queue, ^
    NSPersistentStoreCoordinator *mainThreadContextStoreCoordinator = [context     persistentStoreCoordinator]; //
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; // 
    [context setPersistentStoreCoordinator:mainThreadContextStoreCoordinator];

【讨论】:

@NirMH 创建 NSManagedContext 对象并设置 persistentstoreCoordinator。 dispatch_queue_t request_queue = dispatch_queue_create("com.xxx.ScsMethod", NULL); dispatch_async(request_queue, ^ NSPersistentStoreCoordinator *mainThreadContextStoreCoordinator = [context persistentStoreCoordinator]; // NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; // [context setPersistentStoreCoordinator:mainThreadContextStoreCoordinator];【参考方案2】:

您是否同时从两个线程访问数据库?使用相同的上下文?这可能是原因。看到这个问题

Problems Adding to NSMutableArray: attempt to insert nil object at 10

【讨论】:

以上是关于CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常的主要内容,如果未能解决你的问题,请参考以下文章

Swift CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常。

controllerDidChangeContent 处的核心数据严重应用程序错误

核心数据:NSFetchedResultsController 错误:尝试创建两个动画

CoreData 严重应用错误

如何解决由于 iCloud 合并而导致的“CoreData:错误:严重的应用程序错误”?

CoreData 严重应用程序错误:实体不符合键值编码