gpt4 book ai didi

ios - 如何避免 "Terminating app due to uncaught exception"

转载 作者:行者123 更新时间:2023-11-29 12:08:17 26 4
gpt4 key购买 nike

有时您会遇到异常并使应用程序崩溃。就我而言,这里:

+ (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 不会逃脱这个未捕获的异常,为了避免崩溃,我最好改用@try-catch。

但是,“最好纠正异常的原因,因为它不应该发生。”,所以我认为最好将问题更新如下:

我应该如何让上下文等到迁移完成并执行保存?在迁移失败的情况下,我将删除所有上下文和持久存储,因此保存过程(以防迁移失败)应该被取消。 else(迁移成功),正常保存。

编辑2

因此,为了“纠正异常的原因”,我最终修复了这样的保存上下文:

if (context.hasChanges && context.persistentStoreCoordinator.persistentStores.count) {
...
}

我的问题到此结束。感谢您花时间在这里。

最佳答案

错误对象仅用于预期错误——如果发生不可预见的事情(例如某些线程问题),将抛出异常。您可以使用 try/catch 捕获它,但最好纠正异常的原因,因为它不应该发生。

关于ios - 如何避免 "Terminating app due to uncaught exception",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com