所以我有一个对我来说工作正常的核心数据和 iCloud 组合数据库。
一些用户在尝试删除在 UITableView 中表示的 NSManagedObject 后发生了一定的崩溃。在我附加到崩溃报告的调试日志中,崩溃前有以下错误日志:
2013-05-08 22:38:51.851 MyApp[11819:907] Unresolved error Error Domain=NSCocoaErrorDomain Code=134030 "The operation couldn’t be completed. (Cocoa error 134030.)", {
}
不幸的是,关于错误的信息:{} 是空的,我自己从来没有遇到过错误,所以我不知道如何重新创建它。不过,对于客户来说,它确实发生了至少 21 次。(更糟糕的是,一旦他们重新打开应用程序,一些 NSManagedObject 处于无效状态,我的 tableview 加载它时出现问题。但就在旁边)
实际错误是“tableView:commitEditingStyle:forRowAtIndexPath:”中的“SIGABRT”,下面是相应的代码:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
ICLog(@"Deleting the row %i,%i from the data source", indexPath.row, indexPath.section);
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
//Save the context
NSError *error;
if (![context save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
}
}
PS:从日志中也可以清楚地看出这一切都是从主线程运行的。
这里有人也有这个问题吗?
更新:
幸运的是,我刚刚在另一个我正在开发的应用程序中遇到了同样的错误,在我也可以访问的设备中(到目前为止,我从未在我的任何设备上看到这种情况发生),所以现在我可以在它发生时对其进行调查。这是我发现的:
a) 在设置中关闭 icloud 后它仍然会发生
b) 每次我尝试删除或插入任何 NSManagedObject 时都会发生错误,即使我在启动后立即在我的 Appdelegate 中执行此操作,而从未在其他地方访问数据
所以似乎有什么东西完全阻止了我的数据库被更新。我可以捕捉到上述异常,那么应用程序至少不会崩溃。但是当然不会保存对数据库的任何更改。