迁移到 swift3 后,我有一个无法解决的问题
let fetchRequest: NSFetchRequest<User> = User.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "id == %@", id)
我的应用程序在第二行崩溃,无法访问,没有任何原因。类型是正确的,没有日志,什么都没有,只是访问错误。有什么建议么?
找到原因了,predicate不对,因为id是Int64类型,不知道这个版本的swift需要什么样的predicate
最佳答案
%@
格式需要一个 Foundation 对象 作为参数,比较
"Predicate Format String Syntax"在“谓词编程指南”中。
你可以桥接 Int64
到 NSNumber
:
let id = Int64.max
let predicate = NSPredicate(format: "id == %@", id as NSNumber)
print(predicate) // id == 9223372036854775807
或将格式更改为“long long”:
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 .
关于ios - 快速 3 迁移后 NSPredicate 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40686005/