2011-04-10 95 views
1

每家餐廳都必須有經度和緯度。但是,每個LatitudeLongitude對象都不得有「餐廳」核心數據中的單向關係

所以我有一種單向關係並生成編譯器警告。

有什麼收穫?

我應該用fetchRelationship代替嗎?但是什麼是fetchRelationship?

爲什麼是單向的?它爲什麼有謂詞?爲什麼它被稱爲獲取?我閱讀了文檔,似乎並沒有得到它的真實性。

回答

1

您應該使用提取的屬性(它是滿足指定提取謂詞的託管對象的集合)來表示單向關係。更多信息here

更新

你或許應該使用屬性,你的情況,否則你會在它的userInfo已取得的屬性添加到Restaurant實體,設置它的目的實體LatitudeLongitude和存儲lattitude和經度鍵值對字典。它取謂詞是這樣的:

($FETCH_SOURCE.longitude LIKE [c] $FETCHED_PROPERTY.userInfo.longitude) AND ($FETCH_SOURCE.latitude LIKE [c] $FETCHED_PROPERTY.userInfo.latitude) 
+0

真的嗎?但LatitudeLongitude對象具有什麼謂詞? – 2011-04-10 18:24:24

+0

真的,那麼LattitudeLongitude對象有什麼謂詞?另外每個餐廳應該只有一個LattitudeLongitude對象。事實上,我可能應該把它作爲一個屬性而不是一種關係。但是,我只是好奇。 – 2011-04-10 18:25:55

+0

你說得對,如果你不需要'LatitudeLongitude'對象可以使用緯度和經度的屬性。我已經更新了我的答案,如果您選擇使用提取的屬性,您會做什麼。 – David 2011-04-11 00:11:27

1

OK,超級老問題,但在這裏是如何我會現在解決它。

並非所有的關係都必須填寫。保持你的反向(雙向)關係,但你不一定要把它們聯繫起來。

+ (void)createRestaurantWithCompletion:(void (^)(BOOL, NSError *))completion { 
    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 
     Restaurant *localRestaurant; 
     LatitudeLongitude *localLatLng1; 
     LatitudeLongitude *localLatLng2; 

     restaurant = [Restaurant MR_createInContext:localContext]; 

     localLatLng1 = [LatitudeLongitude MR_createInContext:localContext]; 
     localLatLng2 = [LatitudeLongitude MR_createInContext:localContext]; 

     restaurant.latLng = localLatLng1; 
    }     completion:completion]; 
} 

的時候completion被調用時,都localLatLng1localLatLng2存在,一個是與一間餐廳,一個不是。 當然這種方法在這種形式中沒有意義,它只是爲了證明您可以創建對象而不必滿足它們之間的關係。

Z.