MacOS:NSPredicate 查找“一对一”关系不为零的位置
Posted
技术标签:
【中文标题】MacOS:NSPredicate 查找“一对一”关系不为零的位置【英文标题】:MacOS: NSPredicate find where "one to one" relationship is not nil 【发布时间】:2014-09-25 21:26:34 【问题描述】:我正在尝试使用NSPredicate
过滤核心数据获取请求。谓词字符串如下所示:
"stringProperty = %@ && dateProperty > %@ && oneToOneRelationship != nil"
这不返回任何对象。但是,如果我省略最后一个子句,它会这样做。如果我将最后一个子句更改为"oneToOneRelationship = nil"
,那么它确实如此。当然,这最后两种情况并没有返回我真正想要的数据。 :)
是否有适当的方法来搜索存在关系且不为零的一对一关系?似乎谓词应该有效,但事实并非如此。这是在使用 Xcode 6.1 beta 的当前 Yosemite beta 上。
有人有什么想法吗?
【问题讨论】:
【参考方案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 请求找到。以上是关于MacOS:NSPredicate 查找“一对一”关系不为零的位置的主要内容,如果未能解决你的问题,请参考以下文章
基于 Agora SDK 实现 macOS 端的一对一视频通话