【问题标题】:NSPredicate doesn't work for long long valuesNSPredicate 不适用于 long long 值
【发布时间】:2021-02-04 14:15:57
【问题描述】:

我有这样的简单谓词来从核心数据中获取所有代码对象:

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 真的

如您所见,其中两个被打印为假。那么为什么它们被提取而没有呢?

【问题讨论】:

  • @MartinR 你一如既往地是个天才;)谢谢,它有效...

标签: ios swift core-data nspredicate


【解决方案1】:

问题在于谓词中的%ld 格式与参数的类型(即Double)不匹配。您有以下选择:

  • %fDouble
  • %ldInt
  • %@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))

【讨论】:

  • 你能看看我的问题吗?我需要你的解决方案作为疫苗:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
相关资源
最近更新 更多