核心数据 - Swift - 捕获“在实体中找不到密钥路径”错误

时间:2015-06-03 16:37:40

标签: ios swift core-data error-handling

当我使用错误/不存在的Key / Keypath执行FetchRequest但是应用程序仍然崩溃时,我试图捕获错误。

这就是我创建NSPredicate的方式:

let pred = NSPredicate(format: "(\("WRONGKEY") = %@)", equalTo)
let request = NSFetchRequest()
request.predicate = pred
request.entity = MyEntityDescription

(WRONGKEY是Core Data架构中可能错误/不存在的参数)

这是导致错误的行:

var objects = managedContext?.executeFetchRequest(request, error: &error) as? [Model]

这是错误:

  

*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'在实体中找不到keypath keyX< NSSQLEntity EN id = 2>'   * 首先抛出调用堆栈:.....

所以我试图使用:

if let objects = managedContext?.executeFetchRequest(request, error: &error) as? [Model] {
    println("okkkkkkkk")
} else {
    println("error")
}

但不起作用。

我试过了:

if(error != nil) {

但也不起作用。

有没有办法捕获错误并避免应用程序崩溃?

1 个答案:

答案 0 :(得分:2)

在Swift中,try-catch是不可用的。您可以切换回Objective-C,或使用library like this one添加功能。

也就是说,您可以通过跟踪哪些密钥有效来解决您的问题,而不是实施试一试方法。