2011-12-09 244 views
1

過濾關係我有一個核心數據對象圖設置爲使得與核心數據

Grandparent--(hasMany)-->>Parent--(hasMany)-->>Child 

,並且每個實體具有'modified'屬性。我想執行一個提取操作,在某個日期之後返回每個祖父實體的修改日期。這應包含在該點之後具有修改日期的所有Parent實體,並且與Child實體相同。

我可以輕鬆抓取使用

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"modified > %@", lastSyncDate]; 

有沒有辦法寫一個斷言,這樣我可以以同樣的方式過濾其關係祖父母的名單?謝謝!

回答

0

最後我只是抓住了我的整個對象圖,並使用

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"modified > %@", lastSyncDate]; 
NSArray *modifiedChildren = [[parent.children allObjects] filteredArrayUsingPredicate:predicate]; 

這不是非常有效,但它似乎這樣的伎倆過濾關係。

1

你應該能夠做這樣的事情:(。凡爲ParentChild屬性分別稱爲parentschildren只要改變他們對什麼是你召他們)

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"modified > %@ OR ANY parents.modified > %@ OR ANY parents.children.modified > %@", 
          lastSyncDate, 
          lastSyncDate, 
          lastSyncDate]; 

我建議你對此有讀: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-215891

UPDATE

看來你不能那樣做。我認爲你實際上需要使用SUBQUERY。這個問題類似於你想做什麼: What's better way to build NSPredicate with to-many deep relationships?

+0

這會引發異常:'NSInvalidArgumentException',原因:'此處不允許使用多對多密鑰' – NathanGaskin

+1

對不起,我無法正確測試它,但是您說得對,實際上並不工作。我已更新提及有關'SUBQUERY'和另一個類似問題的鏈接。希望能讓你走上正軌。 – mattjgalloway

+0

感謝您的幫助! :) – NathanGaskin