2010-02-09 142 views
6

我有一個包含4個實體的CoreData模型。核心數據:對多對多關係的預測

型號截圖 - >http://img96.imageshack.us/img96/7857/screenshot20100209at182.png

國家

-StateName

地點:

-locationName (attribute)

-locationDescription

-locationActivities (relatinship)

-state (relationship)

LocationActivities:

-location (relationship)

-activity (relationship)

活動

-activityName(attribute)

-locationsActivities (relationship)

我怎麼能寫,其選擇有

(activity = 'Golf' OR activity = 'Swimming') AND state = 'LA'

回答

5
// With some NSManagedObjectContext *moc 
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
[request setEntity:[NSEntityDescription entityForName:@"Location" 
           inManagedObjectContext:moc]]; 
[request setPredicate:[NSPredicate predicateWithFormat: 
         @"(locationActivities.activity.activityName == %@ OR 
          locationActivities.activity.activityName == %@) AND 
         state.stateName == %@", 
         @"Golf", @"Swimming", @"LA"]]; 
NSError *error; 
NSArray *results = [moc executeFetchRequest:request error:&error];

基本上所有位置的查詢,做核心數據讀取正常,然後再建用於篩選結果的適當謂詞(如Predicate Programming Guide中所述)。

+0

LocationActivities鏈接表怎麼樣? – 2010-02-09 20:56:52

+0

已修復,但爲什麼那個實體在那裏呢?您可以(我相信)從「地點」到「活動」之間只有一對多的關係。 – Tim 2010-02-09 21:01:35

+0

這不起作用。我得到的錯誤:'在這裏不允許的對多密鑰'。 我已經添加了另一個實體,建議由http://stackoverflow.com/questions/1903177/coredata-many-to-many-relationships-and-nspredicate – 2010-02-09 21:16:52

-1

順便說一句,您需要停止思考覈心數據的表和查詢。在覈心數據中只有sqllite持久性存儲的細節,你永遠不會看到它們或處理它們。

實體不是表,關係不是鏈接表。試圖將對象模型塞進你頭腦中的SQL會導致你悲傷,因爲Core Data不像SQL那樣工作。

1

我剛剛注意到在你的屏幕截圖中,你的LocationActivities實體其實拼寫爲LocationAtivities(注意缺少的「c」)。

這足以破壞你的圖形。任何查找LocationActivities的謂詞都將失敗。

這樣的錯誤讓我討厭編程。我似乎花費了更多的時間來追蹤拼寫錯誤,而不是修復設計錯誤。