2014-02-19 51 views
0

请确认我是否明白,权利...CoreData - 获取请求与relatioship对象

想象一下,有一个实体'人'和一个实体'credit_card'。 所以一个'人'可以有很多'credit_card's。

Person实体拥有的属性:逆

和信用卡实体具有creditcards(很多):CARD_NUMBER:名称:STRING年龄:INT 和关系INTvalid_date:DATE和关系:card_user(一个)逆

在我的代码HA一个特定的人(ManagedObject)称为f.e.人*当前用户。如果我现在想获得这个特定的人与特定的“valid_date”的所有信用卡,我将创建下列谓词获取请求(为实体“CREDIT_CARD”):

NSPredicate *predicate1 = [NSPredicate predicateWithFormat: 
@"valid_date == <NSDate object>"]; 

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

此谓词非常适用于我,但这是正确的方式?我真的应该问:“任何关系名称ManagedObject”?谢谢您的回答

问候

+0

[NSPredicate predicateWithFormat: @ “card_user ==%@和valid_date ==%@”,currentUser,日期] –

回答

0

如果我理解你想要正确的东西,所有你需要做的就是用你的Person *currentUsercreditcards财产和过滤下来:

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

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

+1

你错过了“与具体'valid_date'”位... –

+0

我做到了!修复答案...... – StaRbUck42

+0

啊好的^^。我的错。没有提取请求需要。我应该从creditcards集合中得到具有正确'valid_date'的信用卡。不是吗? –

0

如果您已正确设置核心数据模型,则不需要使用ANY关键字。具体而言,信用卡需要与人物对象关联(如果您没有这样做,您应该会收到警告)。然后,你可以两个谓词合并成一个像这样

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