多个 JSON 到多个核心数据实体之间的关系?

Posted

技术标签:

【中文标题】多个 JSON 到多个核心数据实体之间的关系?【英文标题】:Multiple JSON to multiple core data entities with relationships between them? 【发布时间】:2015-12-01 10:25:10 【问题描述】:

我读了这个question 并没有得到答案

我有多个 JSON

路由序列


    "checkpoint_id": 145,
    "hash": "d5b335dac7c34ba1fd001268b80b21dd",
    "is_end": true,
    "is_forward_direction": true,
    "next_checkpoint_id": 144,
    "order": 0,
    "path": [
            "65.597615 57.153329",
            "65.597668 57.153424",
            "65.597659 57.153654",
            "65.596790 57.153182",
            "65.596679 57.153128",
            "65.595181 57.152339",
            "65.592321 57.150904",
            "65.591666 57.150562"
    ],
    "route_id": 87
,
.....

路线


    "active_from": "2014-03-25",
    "active_to": "2024-01-01",
    "capacity_type": "",
    "checkpoints_ids": [
            319,
            321,
            338,
            339,
            340,
            ......
            3355,
            3375
    ],
    "city_id": 1,
    "description": "Областная библиотека - с/о Липовый остров",
    "has_cars_for_disabled_persons": false,
    "hash": "49587333a979a22d93d09e4313661eaa",
    "id": 125,
            "name": "156",
    "route_type_id": 3
,
.......

检查点


    "city_id": 2,
    "code_number": "09080",
    "description": "Большая, 183 в сторону Калинина",
    "hash": "cd398f0d4a7baa5a47facb3476394d84",
    "id": 1503,
    "lat": 56.1307455464724,
    "lon": 69.528181378059,
    "name": "2 микрорайон",
    "routes_ids": [
            401,
            873
    ]
,
.........

Entities picture 和 graph view of entities

我在循环中使用这样的东西从 json 数组创建对象:

+ (instancetype)instanceWithEntity:(NSEntityDescription*)entity inContext:(NSManagedObjectContext *)context fromJSONObject:(NSDictionary *)jsonData
    Route *route = [[Route alloc] initWithEntity:entity insertIntoManagedObjectContext:context];
    route.id = [jsonData valueForKey:@"id"];
    route.capacityType = [jsonData valueForKey:@"capacity_type"];
    route.objectHash = [jsonData valueForKey:@"hash"];
    route.sequenceDescription = [jsonData valueForKey:@"description"];
    route.name = [jsonData valueForKey:@"name"];
    return route;

还有主要问题:在这些情况下如何处理关系。我的应用程序在启动时开始为每个实体处理这个 json 文件。我问的原因是我的 json 没有完全嵌套,它只有来自其他实体的对象的 id 数组。那么如何处理呢?例如:

routeSequence.route = ?

这是指 JSON RouteSequence 的关系。我不能只在这里创建对象,我需要通过他的 id 引用已存在的对象(不能存在,因为这仍然没有下载和解析)

【问题讨论】:

【参考方案1】:

我会使用一个框架来支持这种处理,比如 RestKit。

您正在做的是外键映射 - 获取一个对象,查找另一个对象以获取它所拥有的 id 并将它们连接起来的过程。

基本上,您会首先导入所有对象并包含它们连接的所有对象的 ID。然后对导入的数据再次运行以将所有实例连接在一起。

id 可以存储为临时属性,因为您只需要它们来促进连接处理(尽管您可以根据需要永久存储它们)。

【讨论】:

我不想在这种情况下使用任何框架,我认为在这种情况下可以是非常干净的解决方案。我找到了 objc_setAssociatedObject 方法,我想知道,也许我可以使用它 你可以,虽然不需要降到那个级别,只会导致代码不那么明显 如果我将此数组保存为附加字符串,这是不是一个非常糟糕的主意?稍后如果我需要获取这些数据,我会通过 @"," 将此字符串拆分为数组。在这种情况下会出现什么陷阱?我放弃了所有的关系 如果你使用核心数据,你应该使用关系。字符串处理非常耗时。一个框架可以使您实现这一点变得微不足道...

以上是关于多个 JSON 到多个核心数据实体之间的关系?的主要内容,如果未能解决你的问题,请参考以下文章

EF 核心。两个实体(表)之间的多个一对一或零关系

如何设置核心数据实体之间的关系?

核心数据:父实体与关系

获取多个实体之间没有关系

保存具有多个不同关系的相同类型的各种核心数据实体?

如何为对象计数多个关系创建谓词?核心数据 iOS Swift