ios - NSPredicate 不适用于 long long 值
问题描述
我有这样的简单谓词来从核心数据中获取所有代码对象:
let predicate = NSPredicate(format: "code.state != %@ AND code.validity != %d AND code.validity < %ld", "ACCEPTANCE", 0, Date().timeIntervalSince1970 * 1000)
现在我在里面cellForRow
打印我所拥有的:
print("++++++++++")
print(product.code)
print(product.code?.state)
let a = product.code?.validity ?? 0
print(a)
print(Date().timeIntervalSince1970 * 1000)
print(Double(a) < Date().timeIntervalSince1970 * 1000)
然后我有以下结果:
code.state != "ACCEPTANCE" AND code.validity != 0 AND code.validity < 4789427390557216924
++++++++++ 啊啊啊 可选(“打包”) 1614253260000 1612447824663.5361 错误的 ++++++++++ 产品测试 5 可选(“打包”) 1616880420000 1612447824672.909 错误的 ++++++++++ 产品 testowy 1 可选(“未打包”) 1611788400000 1612447824678.4438 真的 ++++++++++ QQ 可选(“未打包”) 1612306800000 1612447824702.927 真的 ++++++++++ 测试电话 2 可选(“未打包”) 1612393200000 1612447824718.4958 真的
如您所见,其中两个被打印为假。那么为什么他们没有被提取呢?
解决方案
问题是%ld
谓词中的格式与参数的类型(即 a )不匹配Double
。您有以下选择:
%f
与Double
,%ld
与Int
,%@
,NSNumber
这是最不容易出错的方法。
例子:
NSPredicate(format: "code.validity < %f", Date().timeIntervalSince1970 * 1000)
NSPredicate(format: "code.validity < %ld", Int(Date().timeIntervalSince1970 * 1000))
NSPredicate(format: "code.validity < %@", NSNumber(value: Date().timeIntervalSince1970 * 1000))
推荐阅读
- flutter - 如何在颤动中从共享首选项中获取所有内容
- html - 如何通过单击 jquery 来更改 a::before 样式?
- mysql - 输出以某种格式连接两个表
- c++ - 如何使 QGraphicsView 背景以 R - G - B 每秒闪烁
- wpf - 设置 .NET Core 和 .NET Standard 桌面应用程序以进行发布
- batch-file - 如果我运行批处理文件时没有执行 ELSE
- serial-port - 如何在python中将3个连接的字符串更改为字节?
- wix - 我的产品版本号的第三部分(1.0.X)没有填充到4位
- python - FTP 连接在 FileZilla 和命令行上工作,但不是 python ftplib
- php - 无法从 AngularJS 调用 php