2011-04-10 110 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.