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 错误:尝试创建两个动画