我的代码使用核心数据执行许多任务,然后当我保存时,它崩溃了,没有任何错误。我的保存代码很简单:
[[self managedObjectContext] save:&error];
NSLog(@"Error: %@", error);它没有到达错误行,它崩溃了,并退出到主屏幕。
我在Diagnostics中选择了除'Guard Malloc‘之外的所有内容。
这是我在运行save命令时得到的日志:
CoreData: sql: BEGIN EXCLUSIVE
CoreData: sql: SELECT Z_MAX FROM Z_PRIMARYKEY WHERE Z_ENT = ?
CoreData: sql: UPDATE Z_PRIMARYKEY SET Z_MAX = ? WHERE Z_ENT = ? AND Z_MAX = ?
CoreData: sql: COMMIT
CoreData: sql: BEGIN EXCLUSIVE
CoreData: sql: INSERT INTO ZENTRY(Z_PK, Z_ENT, Z_OPT, ZLOCATION, ZBOOKMARKED, ZCREATIONDATE, ZENTRYID, ZMESSAGE, ZSECTIONIDENTIFIER, ZTICDSSYNCID, ZVERSION) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
CoreData: sql: COMMIT
CoreData: sql: pragma page_count
CoreData: annotation: sql execution time: 0.0047s
CoreData: sql: pragma freelist_count
CoreData: annotation: sql execution time: 0.0069s在此之前没有提到任何错误。我怎样才能得到一些关于我的应用程序崩溃的迹象呢?
编辑:我现在知道这是在调用[NSEntityDescription insertNewObjectForEntityForName:@"Entry" inManagedObjectContext:[self managedObjectContext]];之后发生的,并且它是由TICoreDataSync在此之前对我的核心数据存储执行的一个方法引起的。我不能更改该代码,也不能将其从核心数据存储中删除。我认为在多个线程上访问存储是一个问题,所以现在我需要知道如何在主线程上处理这个问题?
发布于 2012-09-30 20:46:39
很明显,MOC已经损坏了。是否正在从多个线程访问它?
我要做的是,对每个更改(其中moc是可保存的-一致的),尝试保存。发生损坏的地方将会崩溃,因此您现在至少知道问题所在。
我在我的应用程序中做到了这一点--事实上,所有的开发版本都会经常保存,只有部署和QA版本才会关闭它。我用这种方式发现了很多bug。在一些if标志语句中包装保存,或者编写宏。
https://stackoverflow.com/questions/12661038
复制相似问题