假设实体Store
与我的实体Offer
具有 to-many 关系(Offer
<< ---- Store
)
我想要获取至少包含特定优惠的所有商店。
所以我尝试了这个:
[NSPredicate predicateWithFormat:@"ANY offers.offerID == %@", _offer.offerID];
生成的SQL请求的日志:
details: SQLite bind[0] = "51dbc2b94eb8dd9a7d00000d"
2014-01-09 11:30:11.169 ****[39542:70b] CoreData: annotation: sql connection fetch time: 0.0011s
2014-01-09 11:30:11.170 ****[39542:70b] CoreData: annotation: fetch using NSSQLiteStatement <0xd50f3a0> on entity 'Store' with sql text 'SELECT DISTINCT t0.Z__AF_RESOURCEIDENTIFIER FROM ZSTORE t0 JOIN ZOFFER t1 ON t0.Z_PK = t1.Z7OFFERS WHERE t1.ZOFFERID = ? ORDER BY t0.ZORDERNUMBER LIMIT 24' returned 0 rows with values: (
)
但它似乎不起作用。
但是我确定商店包含我的优惠,因为当我获取所有商店(没有谓词)时,这是我得到的商店的日志:
<Store: 0x12149350> (entity: Store; id: 0xd6bb210 <x-coredata://135F3A30-4BC6-4428-8D19-8D3EEBBE8173-39447-0000BC0D17888C74/Store/p__af_5097ffad4eb8dd720d02211f> ; data: {
{…}
offers = (
"0x12145c20 <x-coredata://135F3A30-4BC6-4428-8D19-8D3EEBBE8173-39447-0000BC0D17888C74/Offer/p__af_offer_51dbc2b94eb8dd9a7d00000d>"
);
{…}
})
我不明白我做错了什么。
答案 0 :(得分:2)
您应该具有从商品到商店的反向关系。然后,您通过offerID获取商品,并通过访问商品的商店属性访问代码中的商店。
我怀疑这在数据库上比在谓词中使用ANY更容易。
你甚至可以改善这一点。如果您指定从商品到商店的反向关系作为获取商品时预取的关系,则在获取后访问offer.store
时,您将保存一次到数据库的行程。
答案 1 :(得分:1)
我遵循了@MartinR给出的建议(在评论中)。看来这些优惠已损坏并且 nil offerID
。
@Alexei答案并没有解决我的问题,但遵循他的建议是一个很好的线索,即创建从Offer到Store的反向关系。