有些时候您遇到异常并导致应用崩溃。就我而言,在这里:
+ (void)saveContext:(NSManagedObjectContext *)context
{
if ([context hasChanges]) {
[context performBlockAndWait:^{
NSError *error = nil;
BOOL saved = [context save:&error];
if (!saved) {
// do some real error handling
NSLog(@"Could not save master context due to %@", error);
}
else {
if ([context parentContext]) {
[self saveContext:[context parentContext]];
}
}
}];
}
}
由于迁移Coredata时保存上下文而终止。我不明白为什么那段代码不能逃避异常。它不应该记录“由于$ error而无法保存主上下文”?
问题是,NSError有什么意义吗?如何逃避异常并崩溃?我应该使用@ try-catch而不是NSError吗?
编辑1
所以,感谢下面的TheEye先生,我明白NSError并没有逃避这个uncaught exception
,为了避免崩溃,我最好使用@ try-catch代替。
但是,“最好纠正异常的原因,因为它不应该发生。”所以我认为更新问题应该更好,如下所示:
如何让上下文等到迁移完成并执行保存?在迁移失败的情况下,我将删除所有上下文和持久性存储,因此保存过程(如果迁移失败)应该无效。否则(迁移成功),保存正常。
修改2
所以,为了“纠正异常的原因”,我最终修复了这样的保存上下文:
if (context.hasChanges && context.persistentStoreCoordinator.persistentStores.count) {
...
}
结束了我的问题。谢谢您在这里度过的时光。
答案 0 :(得分:1)
错误对象仅用于预期的错误 - 如果发生无法预料的事情(例如某些线程问题),则会抛出异常。您可以使用try / catch来捕获它,但最好更正异常的原因,因为它不应该发生。