关于ios:核心数据-使用关系对象获取请求

CoreData - Fetch request with relationship object

请确认我是否理解没错...

想象一下,有一个实体"人"和一个实体" credit_card"。
因此,一个"人"可以拥有许多"信用卡"。

人员实体具有以下属性:名称:STRING,年龄:INT
和关系:信用卡(对很多)逆

,并且信用卡实体具有:card_number:INT和有效日期:DATE以及关系:card_user(对一个)反向

在我的代码中,我有一个称为f.e的特定人(ManagedObject)。人* currentUser。如果我现在想获取具有特定"有效日期"的该特定人员的所有信用卡,我将使用以下谓词创建获取请求(针对实体" credit_card"):

1
2
3
4
5
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:
@"valid_date == <NSDate object>"];

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:
@"ANY card_user like currentUser"];

此谓词对我来说很好,但这是正确的方法吗?我真的应该问:"任何类似ManagedObject的关系名称"吗?


如果已正确设置核心数据模型,则无需使用ANY关键字。具体来说,信用卡需要将个人关系恢复到个人对象(如果未这样做,则应收到警告)。然后,您可以将两个谓词组合成一个这样的

1
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"person == %@ AND valid_date == %@", currentUser, valid_date];

如果我正确理解了您想要的内容,那么您所要做的就是使用Person *currentUser上的creditcards属性并将其过滤掉:

1
2
3
NSSet *setOfCreditCards = currentUser.creditcards;
NSPredicate *filter = [NSPredicate predicateWithFormat: @"valid_date == %@", date];
NSSet *cardsWithValidDates = [setOfCreditCards filteredSetUsingPredicate:filter];

告诉CoreData有关关系的原因是为了避免从头开始进行另一个查询。