核心数据仅返回一个对象而不是所有对象

时间:2018-04-22 16:07:13

标签: swift xcode core-data

我有以下核心数据:

enter image description here

我要做的是获取所有 producto categoria.name “carne”并且同时时间有 supermercado.name “Mercadona”

在SQL中的

看起来像这样:

select p.*
from producto as p inner join categoria as c on p.id = c.producto_id
                   inner join supermercado as s on p.id = s.producto_id
where c.name = "carne" AND s.name = "Mercadona";

在sql中很简单,我们进行连接,在where子句中我们过滤我们想要选择的元素。

有一次,我们知道我们想做什么我试图用核心数据和swift提供给我们的谓词来编写这些查询。但我没有取得好成绩。

let p1 = NSPredicate(format: "SUBQUERY(supermercados, $supermercado, ANY $supermercado.name == %@).@count > 0", super_name)
let p2 = NSPredicate(format: "SUBQUERY(categorias, $categoria, ANY $categoria.name == %@).@count > 0",categoria)

fetchrequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [p1, p2])

我编写了两个谓词,然后使用和谓词连接它们,但我只有一个问题。是应该返回3个产品:“ rioja ”和“ carne_demigrante ”但只返回一个对象并非全部

当我在没有子查询的情况下编写谓词时,我遇到了完全相同的问题,它只返回了一个对象而不是我在“producto”中使用该属性的3个对象。

所以一百万美元的问题是,我怎样才能返回所有具有此条件的对象而不是仅返回 ONE 对象?

1 个答案:

答案 0 :(得分:0)

我不明白为什么你需要使用SUBQUERY而不是更简单的“加入”

let p1 = NSPredicate(format: "ANY supermercados.name like %@", super_name)
let p2 = NSPredicate(format: "ANY categorias.name like %@" ,categoria)

fetchrequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [p1, p2])