应用程序在[managedObjectContext save:]上退出而没有错误

时间:2012-09-30 11:52:38

标签: iphone objective-c ios core-data crash

我的代码使用核心数据执行许多任务,然后当我去保存时,它崩溃没有任何错误。我的保存代码就是:

[[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在此之前在我的核心数据存储上执行的方法引起的。我无法更改该代码,或将其从我的核心数据存储中删除。我认为在多线程上访问存储是一个问题,所以现在我需要知道如何在主线程上处理它?<​​/ p>

1 个答案:

答案 0 :(得分:3)

显然,MOC已损坏。它是从多个线程访问的吗?

我要做的是,每次更改(moc可保存 - 一致),尝试保存。腐败发生的地方会崩溃,所以你现在至少知道问题的位置或多或少。

我在我的应用程序中执行此操作 - 实际上所有开发构建保存不断,只有部署和QA构建才会关闭此功能。我通过这种方式发现了很多错误。将保存包装在一些if语句中或写一个宏。