迅速移植后NSPredicate崩溃

Pav*_*kyy 0 core-data ios swift swift3

迁移到swift3后,我遇到了无法解决的问题

    let fetchRequest: NSFetchRequest<User> = User.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "id == %@", id)
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*n R 9

%@格式期待Foundation对象作为参数,比较 "上游格式化字符串的语法"中的"谓词编程指南".

你可以桥Int64接到NSNumber:

let id = Int64.max
let predicate = NSPredicate(format: "id == %@", id as NSNumber)
print(predicate) // id == 9223372036854775807
Run Code Online (Sandbox Code Playgroud)

或将格式更改为"long long":

let id = Int64.max
let predicate = NSPredicate(format: "id == %lld", id)
print(predicate) // id == 9223372036854775807
Run Code Online (Sandbox Code Playgroud)

从Swift 3.0.1(Xcode 8.1)开始,可以将所有数字类型桥接到NSNumber一起,实现 SE-0139桥接数字类型到NSNumber和Cocoa结构到NSValue.