【问题标题】:MacOS: NSPredicate find where "one to one" relationship is not nilMacOS:NSPredicate 查找“一对一”关系不为零的位置
【发布时间】:2014-09-25 21:26:34
【问题描述】:

我正在尝试使用NSPredicate 过滤核心数据获取请求。谓词字符串如下所示:

"stringProperty = %@ && dateProperty > %@ && oneToOneRelationship != nil"

这不返回任何对象。但是,如果我省略最后一个子句,它会这样做。如果我将最后一个子句更改为"oneToOneRelationship = nil",那么它确实如此。当然,这最后两种情况并没有返回我真正想要的数据。 :)

是否有适当的方法来搜索存在关系且不为零的一对一关系?似乎谓词应该有效,但事实并非如此。这是在使用 Xcode 6.1 beta 的当前 Yosemite beta 上。

有人有什么想法吗?

【问题讨论】:

    标签: macos core-data nspredicate


    【解决方案1】:

    实际上,“!= nil”测试运行良好。事实证明,虽然我认为一对一的关系正在设置,但实际上并没有。所以,谓词工作正常。当然,是我的代码出错了。

    【讨论】:

      【解决方案2】:

      使用oneToOneRelationship.@count != 0。以下代码应该可以工作:

      斯威夫特:

      let predicate = NSPredicate(format: "stringProperty == %@ && dateProperty > %@ && oneToOneRelationship.@count != 0", argumentArray:[stringProperty, dateProperty])
      fetchRequest.predicate = predicate
      

      目标-C:

      NSPredicate *predicate = [NSPredicate predicateWithFormat:@"stringProperty == %@ && dateProperty > %@ && oneToOneRelationship.@count != 0", stringProperty, dateProperty];
      [fetchRequest setPredicate:predicate];
      

      【讨论】:

      • 很奇怪(好吧,对我来说很奇怪),它奏效了!我没想到@count 会为一对一的关系工作。奇怪的是,虽然对“@count != 0”的测试有效,但对“@count = 1”的测试却没有。一定会喜欢 NSPredicate 的变幻莫测...
      • 实际上,@count 不适用于一对一的关系。原来的 != nil 测试正在工作。事实证明关系没有设置,所以当然,它没有被 fetch 请求找到。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多