gpt4 book ai didi

cocoa - 如何使用 Core Data 实现具有可定制节点的图?

转载 作者:行者123 更新时间:2023-12-03 17:39:23 24 4
gpt4 key购买 nike

我正在尝试创建一个具有底层有向无环图结构的核心数据应用程序。因此,每个节点与其子节点都有“对多”关系,与其父节点有反向“对多”关系。

到目前为止,使用 Core Data,这一切都非常简单。我遇到的问题是允许这些节点是可定制的。

详细来说,我真的很喜欢与 Sublime Text 相关的 API 以及用户拥有的功能。我想允许用户在此图上定义节点类型。用户可以创建一个名为“电影评级”的节点,使用 JSON 定义,如下所示:

{
"type": "Movie Rating",
"fields": [{
"name": "Movie",
"type": "str",
"required": "true",
"min-length": "1",
}, {
"name": "Rating",
"type": "int",
"required": "true",
"min": 1,
"max": 5
}]
}

可以有任意数量的属性和许多不同类型的节点。如果我想用 Core Data 实现这种灵活的数据结构,我该怎么做呢?

(请注意,每个节点都将具有父子关系以及任何自定义字段/属性)。

谢谢

切特

最佳答案

您不能即时修改核心数据模型。但在某种程度上,您可以通过以下方式拥有可扩展的模型

  • 创建一个或多个简单实体类型,仅存储 NSString 键和某种值对象。您可能需要多个,具体取决于您想要支持多少种不同类型的值。一个简单的示例将具有 NSString 键和值以及与节点实体的一对一关系。
  • 添加从节点实体到此键/值实体的一对多关系。

这允许每个节点拥有任意数量的键/值对。不同的节点可以有不同的对组合。就核心数据而言,它们并没有真正的不同,但您的应用程序逻辑可以将它们视为有效的不同节点类型。

如果您将使用多个值类型(看起来可能会),您可以创建一个名为 KeyValuePair 的抽象实体类型,其中包含特定于类型的子实体,例如 KeyValuePairStringKeyValuePairNumber

要使用类似于 JSON 示例的内容来管理输入(因此节点不包含任何任意键/值集合),您需要

  • 将节点内容信息存储在 NSDictionary 中(可能是您通过解析上面包含的 JSON 创建的)。
  • 为节点使用便捷构造函数,该构造函数将此字典作为参数,并创建节点和字典中描述的必要键/值对对象。
  • 在允许修改节点描述时要非常小心。如果您后来决定在电影分级中添加“年份”字段,那么该怎么办?由您决定应该发生什么并编写代码(如果有)来实现它。您将无法依赖核心数据模型版本控制。

按照您的电影评级示例,在创建新实例时,您可能会得到类似的结果

  • Node 的一个实例,其属性包括父/子节点关系、对“电影评级”节点定义的引用(可能只是一个名称,也可能是某种对象引用)和一个 to - 与上面提到的 KeyValuePair 实体有很多关系。
  • 一个相关的 KeyValuePair,其中键为“name”,值为“Star Wars”
  • 第二个相关的 KeyValuePair,其中键为“rating”,值为 5。

但请注意,您必须编写任何必要的代码以确保不违反节点描述 - 例如,通过采用“电影评级”描述定义的节点并添加任意其他键/值没有意义的对(例如,在电影评级中添加数字“权重”k/v 对可能没有意义,但核心数据不会帮助您防止这种情况发生)。

这一切可能有点尴尬——您实际上是在核心数据之上实现更高级别的数据模式。不过,只要小心一点,这应该是可能的。

关于cocoa - 如何使用 Core Data 实现具有可定制节点的图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22645262/

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