NSPredicate在swift 3迁移后崩溃
在迁移到swift3之后,我有一个无法修复的问题
let fetchRequest: NSFetchRequest<User> = User.fetchRequest() fetchRequest.predicate = NSPredicate(format: "id == %@", id)
我的应用程序在第二行崩溃,访问不良,没有理由。 types是正确的,没有日志,没有什么,只是不好的访问。 有什么build议么?
发现原因,谓词错误,导致id是Int64types,不知道这个版本的swift需要什么样的谓词
%@
格式期望Foundation对象作为参数,比较“Predicate Programming Guide”中的“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)中,将所有数字types桥接到NSNumber
是可能的,实现SE-0139桥接数字types到NSNumber和Cocoa Structs到NSValue 。