ios - 如何在 iOS Swift 中处理 CoreData 崩溃?
问题描述
我需要处理核心数据崩溃。我的代码在 managedObjectContext.save() 上崩溃了。但是 catch 块没有捕获任何异常。为了避免崩溃,我怎样才能更好地编写我的 Catch 块这是我的代码。
do {
try managedObjectContext.save()
}
catch let error as NSError {
Print.print("Error saving data store: \(error)")
}
解决方案
这看起来真的像你搞砸了上下文、持久存储和它的协调器的初始化。你最好调查一下。SO 上已经有类似的帖子,比如这个。
更重要的是,您不会try-catch
在 Swift 中拦截此类异常。实际上,Swifttry-catch
与异常没有任何关系,但它是一个高级 API,用于拦截报告的错误。在您的情况下,您只需拦截将数据保存到数据库时可能报告的错误。但是错误似乎来自更深的地方。
更进一步,整个核心数据仍然完全在 ObjectiveC 中,它具有完全不同的异常抛出系统,尽管这些异常可能被 ObjectiveC 拦截,try-catch
但相同的异常不会被来自 Swift 的异常拦截。该系统所做的只是替换了将指向错误的指针输入到方法中:.save(&error)
这是在objectiveC中使用的。只有当此错误为非空时,您的 catch 块才会触发。
推荐阅读
- typescript - 键入具有可选键的对象,但存在的键为非空值
- javascript - firebase 实时数据库错误:Reference.set 失败:第一个参数包含未定义的属性
- ruby - 定义 Ruby 的奇怪行为?
- webpack - 无法从模板访问 htmlWebpackPlugin.files 数据
- mysql - InnoDB:在现有表中查找聚集索引
- python-3.x - 有没有办法在调用另一个 Tk() 窗口时关闭 Tk() 窗口并且两个 Tk() 窗口都是两个不同的 python 文件?
- c++ - 使用 CDT 从头文件中获取属性定义的节点元素是什么?
- html - Angular 6:如何根据滚动突出显示导航栏上的元素?
- powershell - 通过电子邮件向多人发送个人附件
- mysql - MySQL 命令行客户端