迅速移植后NSPredicate崩溃

时间:2016-11-18 21:12:19

标签: ios swift core-data swift3

迁移到swift3后,我遇到了无法修复的问题

    let fetchRequest: NSFetchRequest<User> = User.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "id == %@", id)

我的应用程序在第二行崩溃,访问不良,没有理由。类型是对的,没有日志,没有,只是访问不好。有什么建议?

发现一个原因,谓词错误,导致id是Int64类型,不知道我需要什么样的谓词这个版本的swift

1 个答案:

答案 0 :(得分:6)

%@格式期望 Foundation对象作为参数,比较 &#34;谓词编程指南中的"Predicate Format String Syntax"&#34;。

您可以将Int64NSNumber

联系起来
let id = Int64.max
let predicate = NSPredicate(format: "id == %@", id as NSNumber)
print(predicate) // id == 9223372036854775807

或将格式更改为&#34; long long&#34;:

let id = Int64.max
let predicate = NSPredicate(format: "id == %lld", id)
print(predicate) // id == 9223372036854775807

从Swift 3.0.1(Xcode 8.1)开始,将所有数字类型桥接到NSNumber是可行的 SE-0139 Bridge Numeric Types to NSNumber and Cocoa Structs to NSValue