0

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

[[self managedObjectContext] save:&error];

NSLog(@"Error: %@", error);

它没有到达错误行,到那时它已经崩溃并退出到主屏幕。

我在诊断中选择了除“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 在此之前在我的核心数据存储上执行的方法引起的。我无法更改该代码,也无法将其从我的核心数据存储中移除。我认为这是在多个线程上访问商店的问题,所以现在我需要知道如何在主线程上处理这个问题?

4

1 回答 1

3

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

我要做的是,每次更改(moc 可保存 - 一致),尝试保存。发生损坏的地方会崩溃,因此您现在至少或多或少地知道问题出在哪里。

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

于 2012-09-30T12:46:38.530 回答