gpt4 book ai didi

ios - 如何设计CoreData存储复杂数据

转载 作者:搜寻专家 更新时间:2023-11-01 05:57:36 26 4
gpt4 key购买 nike

我需要使用 CoreData 在本地将来自 API 调用的一些数据存储为 JSON。

问题是,JSON 太复杂了,我无法在 CoreData 中处理。我将 JSON 作为具有 4 个键的 Dictionary,这 4 个键再次包含 Dictionary,而那些 Dictionary 具有 数组字典

现在,我真的不知道我应该如何为这个要求设计实体和属性,但我试着这样做,我所做的是,我创建了一个实体(比如 XYZ)并且这个实体有 4 个关系(一个到一个)到 4 个其他实体,这四个实体只不过是我在 JSON 文件中得到的四个 Dictionary。我将这些 ArrayDictionary 存储为可转换类型。有点困惑,对吧?所以让我把 JSON 数据放在这里

{
outerKey1 = {
someKey = “Some String";
disableAutoFill = 1;
disableABC = 1;
disableXYZ = 1;
disableThis = 1;
disableThat = 1;
disableBla = 1;
disableBlaBla= 1;
disableBlaBlaBlaBla = 1;
disableBlaBlaBlaBlaBlaBla= 1;
};
outerKey2 = {
someKey = (
{
markPath = 0;
title = "Some Name";
url = "http://www.BlaBla.com";
},
{
markPath = 0;
title = "Some Name";
url = "http://www.something.com";
},
{
markPath = 0;
title = Yahoo;
url = "http://www.yahoo.com";
},
{
Path = 0;
title = “title";
url = "http://www.title.com";
}
);
enabled = 1;
};
outerKey3 = {
enabled = 1;
gatewayIP = "192.172.169.10";
gatewayPort = 8080;
gatewayRoutingUrls = (
"www.kuchbhi.com",
"www.oh-teri.com"
);
};
outerKey4 = {
SomeCategories = (
SomeCategories,
someOtherCategories
);
defaultUrl = "www.meriapniwebsite.com";
enabled = 1;
exceptionUrls = (
"www.kuchbhihojay.com"
);
filterUrls = (
"www.kuchtobhi.com",
"www.kyaaapjhandhai.com"
);
filteringFlag = 1;
};
}

我的方法可以吗还是需要改正?或者我是否需要以完全不同的方式实现它。请帮助我,谢谢

最佳答案

问题是您正在尝试根据 JSON 的结构创建 CoreData 实体。您应该根据 JSON 表示的对象以及它们之间的关系来创建实体。

您的问题并没有真正提供有关您的数据模型意图的足够信息,因此我无法为您提供准确的答案,但将这些数据存储为一堆可转换的字典可能不是最佳答案。使用可转换属性意味着无法查询这些值中的任何一个,并且您没有应该包含在那些字典中的属性的明确列表。这意味着您将有大量的 if let 语句在您访问数据时检查字典中的字符串类型值。相反,这些值中的每一个都应该映射到 CoreData 实体上的属性。

我要问的第一件事是这些 outerKey 字典是否表示我的基础对象的属性和值,或者每个 outerKey 是否真的表示它自己的具有关系的模型对象到根对象。如果它们是一个对象的属性,那么只需读取 JSON 并将值映射到实体的属性。如果不是,那么您应该创建多个实体并像您当前所做的那样创建关系,但您应该为这些实体的每个值创建属性。

对于嵌套数组和字典,您可能还想创建其他具有关系的实体。

请记住,您的 CoreData 模型应该反射(reflect)对象及其相互关联的方式。它不应该只是反射(reflect)你的 JSON 的结构,除非你的 JSON 也恰好代表了正确的结构。

示例

因为我不知道你的数据真正代表什么,这可能不是你应用程序的完美结构,但对你的 JSON 意味着什么做出一些假设,这就是我想要的实体想出。

- RootEntity
- outerKey1: OuterKey1 // one to one
- outerKey2: OuterKey2 // one to one
- outerKey3: OuterKey3 // one to one
- outerKey4: OuterKey4 // one to one

- OuterKey1
- someKey: String
- disableAutoFill: Bool
- disableABC: Bool
- disableXYZ: Bool
- disableThis: Bool
- disableThat: Bool
- disableBla: Bool
- disableBlaBla: Bool
- disableBlaBlaBlaBla: Bool
- disableBlaBlaBlaBlaBlaBla: Bool

- OuterKey2
- someKey: [SomeKeyEntity] // one to many
- enabled: Bool

- SomeKeyEntity
- markPath: Bool
- title: String
- urlString: String

- OuterKey3
- gatewayIP: String
- gatewayPort: Int
- gatewayRoutingURLs: [String] // This can be a transformable `Array`, unless you think you will need to query based on this property later
- enabled: Bool

- OuterKey4
- someCategories: [SomeCategoriesEntity] // one to many
- defaultURL: String
- enabled: Bool
- exceptionURLs: [String] // This can be a transformable `Array`, unless you think you will need to query based on this property later
- filterURLs: [String] // This can be a transformable `Array`, unless you think you will need to query based on this property later
- filteringFlag: Bool

希望对您有所帮助!

关于ios - 如何设计CoreData存储复杂数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35424189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com