2014-02-19 58 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];