迁移到swift3后,我遇到了无法修复的问题
let fetchRequest: NSFetchRequest<User> = User.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "id == %@", id)
我的应用程序在第二行崩溃,访问不良,没有理由。类型是对的,没有日志,没有,只是访问不好。有什么建议?
发现一个原因,谓词错误,导致id是Int64类型,不知道我需要什么样的谓词这个版本的swift
答案 0 :(得分:6)
%@
格式期望 Foundation对象作为参数,比较
&#34;谓词编程指南中的"Predicate Format String Syntax"&#34;。
您可以将Int64
与NSNumber
:
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。