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]; |
如果我正确理解了您想要的内容,那么您所要做的就是使用
1 2 3 | NSSet *setOfCreditCards = currentUser.creditcards; NSPredicate *filter = [NSPredicate predicateWithFormat: @"valid_date == %@", date]; NSSet *cardsWithValidDates = [setOfCreditCards filteredSetUsingPredicate:filter]; |
告诉