核心数据嵌套关系获取谓词

时间:2015-10-08 10:50:31

标签: ios core-data

好的,所以寻找答案,我可能会假设其他人没有,这就是为什么解决方案适合他们。

问题: 假设我有一个名为DogOwner的实体。狗主人可以有多个Dogs,每只狗可以有多个Wearables。请注意,所有关系都是可选的,并且是一对多的(反对多对一)。

目的: 搜索拥有Wearable类型GpsTracker且包含898764 ID的狗的所有犬主。

我的方法: 使用以下谓词

获取实体DogOwner
NSPredicate(format: "(dog.wearable.type == %@) AND (dog.wearable.external_id CONTAINS[cd] %@)", theType, theIdentifier)

我收到unimplemented SQL generation for predicate错误。

尝试 - >与ANYNested core data fetch) 尝试了互联网上出现的其他内容。到目前为止我没有看到任何作品,我认为问题更深层,因为其他人使用点表示法成功查询了嵌套树结构图。

2 个答案:

答案 0 :(得分:0)

虽然子查询是一种可行的方法,但它非常复杂,而且不必要。为什么不直接搜索特定的Wearable并通过方便的一对一关系获得所有者?

// fetch wearable with id x
let owner = wearable.dog.owner

答案 1 :(得分:-1)

我认为你需要使用SUBQUERY,只是因为你需要同时测试这两个条件:

NSPredicate(format: "SUBQUERY(dog, $d, SUBQUERY($d.wearable, $w, $w.type == %@ AND $w.external_id CONTAINS[cd] %@).@count > 0).@count > 0", theType, theIdentifier)

或者“取得超过0只狗的DogOwners拥有超过0个可穿戴设备的标准”。