每家餐厅都必须有纬度和经度。但是,每个LatitudeLongitude对象都不能有“餐馆”
所以我有单向关系并生成编译器警告。
有什么问题?
我应该使用fetchRelationship吗?但是什么是fetchRelationship?
为什么它是单向的?为什么它有谓词?为什么称它为fetch?我阅读了文档,但似乎并没有得到它的真实含义。
答案 0 :(得分:1)
您应该使用fetched属性(它是满足指定fetch谓词的托管对象的集合)来表示单向关系。更多信息here。
<强>更新强>
您应该在您的情况下使用属性,否则您将向Restaurant
实体添加一个fetched属性,将其目标实体设置为LatitudeLongitude
并在其userInfo
中存储纬度和经度键值对{1}}字典。它的fetch谓词看起来像这样:
($FETCH_SOURCE.longitude LIKE [c] $FETCHED_PROPERTY.userInfo.longitude) AND ($FETCH_SOURCE.latitude LIKE [c] $FETCHED_PROPERTY.userInfo.latitude)
答案 1 :(得分:1)
好的,超级老问题,但现在我的解决方法就是现在。
并非所有关系都必须填补。保持你的反向(双向)关系,但你不必将它们联系起来。
+ (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
被调用时,localLatLng1
和localLatLng2
都存在,一个链接到餐馆,一个不是。
当然,这种方法在这种形式中毫无意义,只是为了证明你可以创建对象而不必满足他们的关系。
Ž。