核心数据中的单向关系

时间:2011-04-10 07:56:33

标签: objective-c core-data relationship

每家餐厅都必须有纬度和经度。但是,每个LatitudeLongitude对象都不能有“餐馆”

所以我有单向关系并生成编译器警告。

有什么问题?

我应该使用fetchRelationship吗?但是什么是fetchRelationship?

为什么它是单向的?为什么它有谓词?为什么称它为fetch?我阅读了文档,但似乎并没有得到它的真实含义。

2 个答案:

答案 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被调用时,localLatLng1localLatLng2都存在,一个链接到餐馆,一个不是。 当然,这种方法在这种形式中毫无意义,只是为了证明你可以创建对象而不必满足他们的关系。

Ž。