请确认我是否明白...
想象一下,有一个实体'人'和一个实体'credit_card'。 所以一个'人'可以拥有很多'credit_card'。
人物实体具有以下属性:名称:STRING 和年龄:INT 和关系:信用卡(对许多人来说)反向
并且信用卡实体具有: card_number:INT 和 valid_date:DATE 和关系: card_user (到一个)逆
在我的代码中,我有一个名为f.e的特定人(ManagedObject)。人 * currentUser 。如果我现在想要使用特定的'valid_date'获取此特定人的所有信用卡,我将使用以下谓词创建获取请求(对于实体'credit_card'):
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:
@"valid_date == <NSDate object>"];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:
@"ANY card_user like currentUser"];
这个谓词适合我,但这是正确的方法吗?我应该真的要求:“任何关系名称,如 ManagedObject ”?
答案 0 :(得分:0)
如果我理解你想要什么,你需要做的就是使用creditcards
上的Person *currentUser
属性并过滤掉它:
NSSet *setOfCreditCards = currentUser.creditcards;
NSPredicate *filter = [NSPredicate predicateWithFormat: @"valid_date == %@", date];
NSSet *cardsWithValidDates = [setOfCreditCards filteredSetUsingPredicate:filter];
您告诉CoreData
关于关系的原因是避免从头开始进行另一次查询。
答案 1 :(得分:0)
如果您已正确设置核心数据模型,则无需使用任何关键字。特别是信用卡需要将个人关系返回到person对象(如果你不这样做,你应该收到警告)。然后你可以将两个谓词组合成一个像这样的
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"person == %@ AND valid_date == %@", currentUser, valid_date];