迅速迁移3后NSPredicate崩溃 [英] NSPredicate crash after swift 3 migration

查看:91
本文介绍了迅速迁移3后NSPredicate崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

after migration to swift3, I have an issue that cannot fix

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

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

my App crashes on second line, bad access, no reason. types are right, no log, nothing, just bad access. any suggestions?

找到原因,谓词错误,原因是ID为Int64类型,不知道此版本的swift我需要哪种谓词

Found a reason, predicate is wrong, cause id is Int64 type, have no idea what kind of predicate I need for this version of swift

推荐答案

%@ 格式期望以 Foundation对象作为参数,进行比较
谓词格式字符串语法 在谓词编程指南中。

The %@ format expect a Foundation object as argument, compare "Predicate Format String Syntax" in the "Predicate Programming Guide".

您可以将 Int64 桥接到 NSNumber

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

或将格式更改为 long long:

or change the format to "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 https://github.com/apple/swift-evolution/blob/master/proposals/0139-bridge-nsnumber-and-nsvalue.md rel = noreferrer> SE-0139将数值类型桥接到NSNumber和可可结构到NSValue

Bridging all number types to NSNumber is possible as of Swift 3.0.1 (Xcode 8.1) with the implementation of SE-0139 Bridge Numeric Types to NSNumber and Cocoa Structs to NSValue.

这篇关于迅速迁移3后NSPredicate崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆