ios - 快速 3 迁移后 NSPredicate 崩溃

标签 ios swift core-data swift3

迁移到 swift3 后,我有一个无法解决的问题

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

我的应用程序在第二行崩溃,无法访问,没有任何原因。类型是正确的,没有日志,什么都没有,只是访问错误。有什么建议么?

找到原因了,predicate不对,因为id是Int64类型,不知道这个版本的swift需要什么样的predicate

最佳答案

%@ 格式需要一个 Foundation 对象 作为参数,比较 "Predicate Format String Syntax"在“谓词编程指南”中。

你可以桥接 Int64NSNumber:

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/

相关文章:

arrays - Swift 数组随机插入和删除非常慢

ios - 刷新 NSFetchedResultsController 数据?

ios - 什么时候使用 NSSet 而不是 NSArray 更好?

为模拟器构建框架时 Swift 缺少类型

ios - 进度条下载状态指示器 Swift iOS

macos - 快速识别用户是否在编辑 NSTextField 时按下了箭头键

ios - UIImage CompressionQuality 不是线性的

ios - 具有关系的 NSManagedObject 的核心数据和生成的子类

ios - UITableView 中的 UIImage 显示另一个单元格的图像一秒钟

ios - 当我尝试使用 userDefaults 保存到 ui 颜色时,Xcode 给我错误 : Fatal error: Unexpectedly found nil while unwrapping an Optional value