【发布时间】:2018-06-04 10:24:52
【问题描述】:
我有类似 JSON:
{
cities: {
1: "London",
3: "New York",
9: "Tokio",
10: "Moscow"
},
keywords: {
120: "walk",
121: "run",
122: "eat",
123: "lake"
},
parks: [
{
id: "1",
likes: "5",
parkName: "Park 1 in NEW YORK",
city: "3", // id of the City NEW YORK
keywords: [
"120",
"121"
]
},
{
id: "1",
likes: "678",
parkName: "Park 2 in NEW YORK",
city: "3", // id of the City NEW YORK
keywords: [
"120",
"123"
]
},
{
id: "1",
likes: "416",
parkName: "Park in London",
city: "1", // id of the City London
keywords: [
"123",
"122"
]
},
... so many ...
]
}
}
所以,在 Xcode 中,我想这样使用: sample Xcode Core Data relationship
我创建了 NSManagedObject 子类,并且我有这个方法:
- (void)addParksObject:(PKParks *)value;
- (void)removeParksObject:(PKParks *)value;
- (void)addParks:(NSSet<PKParks *> *)values;
但是,我希望使用城市和关键字的 id 将 Parks 表连接到 MySQL 中的另一个表。 所以, 我有很多公园、一些城市和关键词。
这样存储数据的方法正确吗?
- 我应该存储城市和关键字的ID吗?
- 我应该像在 MySQL 中那样手动连接表吗?
- 我应该将 JSON 格式更改为无 ID 吗?
例如 JSON:
{
parks: [
{
id: "1",
likes: "5",
parkName: "Park 1 in NEW YORK",
city: "NEW YORK",
keywords: [
"walk",
"run"
]
},
{
id: "1",
likes: "678",
parkName: "Park 2 in NEW YORK",
city: "NEW YORK",
keywords: [
"walk",
"lake"
]
},
{
id: "1",
likes: "416",
parkName: "Park in London",
city: "London",
keywords: [
"lake",
"eat"
]
},
... so many ...
]
}
}
【问题讨论】:
-
CoreData 如果您还没有继续并更改持久存储是一个 sqlite 文件。您可能知道 Sqlite 默认没有主键和外键约束或引用完整性约束。 CoreData 的关系是解决这个问题的方法。当您将城市连接到公园表时,您在城市和公园之间创建了一对多的关系。因此,每当您将城市对象获取到 managedObject 上下文时,城市对象的 parks 属性将具有与其关联的所有公园的数组。那么有什么困惑呢?
-
当您添加一个公园时,您可以使用诸如 cityObject.parks = set of parks with your current one 之类的东西添加它和一些 City 对象 :) 所以显然核心数据知道哪个公园与城市相关联它维护一个 id(类似于内部的主键和外键,如果您打开 sqlite 文件,您将看到一个名为 Z_PK,Z_FK 的列)并且您不必将任何 id 映射到任何东西来链接两个托管手动对象
标签: ios objective-c json xcode core-data