Objective c 核心数据中的单向关系

Objective c 核心数据中的单向关系,objective-c,core-data,relationship,Objective C,Core Data,Relationship,每个餐厅都必须有经纬度。但是,每个LatitudeLongitude对象都不能有“餐厅” 因此,我有一个单向关系,并生成一个编译器警告 有什么问题吗 我应该改用fetchRelationship吗?但什么是关系 为什么是单向的?为什么它有谓词?为什么它叫fetch?我阅读了文档,但似乎没有理解它的真正含义。您应该使用获取属性(即满足指定获取谓词的托管对象的集合)来表示单向关系。更多信息 更新 您可能应该在本例中使用属性,否则您将向餐厅实体添加获取的属性,将其目标实体设置为纬度长度,并将纬度和经度

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

因此,我有一个单向关系,并生成一个编译器警告

有什么问题吗

我应该改用fetchRelationship吗?但什么是关系


为什么是单向的?为什么它有谓词?为什么它叫fetch?我阅读了文档,但似乎没有理解它的真正含义。

您应该使用获取属性(即满足指定获取谓词的托管对象的集合)来表示单向关系。更多信息

更新

您可能应该在本例中使用属性,否则您将向
餐厅
实体添加获取的属性,将其目标实体设置为
纬度长度
,并将纬度和经度键值对存储在其
用户信息
字典中。其获取谓词如下所示:

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

好吧,这是一个非常古老的问题,但我现在要解决这个问题

并不是所有的关系都需要填充。保持你的反向(双向)关系,但你不一定要把它们联系起来

+ (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
都存在,一个链接到餐厅,另一个不存在。 当然,这种方法在这种形式下毫无意义,它只是为了证明你可以创建对象而不必满足它们的关系


真的吗?但是LatitudeLongitude对象应该有什么谓词呢?真的,那么LatitudeLongitude对象应该有什么谓词呢?此外,每个餐厅应该只有一个LattitudeLongitude对象。事实上,我可能应该把这当作一种属性,而不是一种关系。然而,我只是好奇。你是对的,如果你不需要
LatitudeLongitude
对象也可以使用纬度和经度属性。我已经更新了我的答案,如果您选择使用获取属性,您会做什么。在谓词中[c]是什么意思?它使比较不区分大小写。