【问题标题】:Core Data - Swift - Catch "keypath not found in entity" error核心数据 - Swift - 捕获“实体中找不到键路径”错误
【发布时间】:2015-08-18 00:08:48
【问题描述】:

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

这就是我创建 NSPredicate 的方式:

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

(WRONGKEY 是核心数据模式中可能错误/不存在的参数)

这是导致错误的行:

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

这是错误:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“在实体 中找不到 keypath keyX” * 首先抛出调用栈:.....

所以我尝试使用:

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

但不起作用。

我试过了:

if(error != nil) {

但也不起作用。

有没有办法捕捉错误并避免应用崩溃?

【问题讨论】:

    标签: ios swift core-data error-handling


    【解决方案1】:

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

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

    【讨论】:

    • 但是应该有办法捕获异常,即使不使用try-catch,不是吗?
    • 如谓词无匹配时请求返回空数组
    • 空结果不同于异常。异常通常表示程序员错误。
    • 我明白了。谢谢解释
    猜你喜欢
    • 2021-10-19
    • 2011-01-30
    • 2011-04-12
    • 2011-07-08
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多