gpt4 book ai didi

objective-c - 最佳实践? - 数组/字典作为核心数据实体属性

转载 作者:行者123 更新时间:2023-11-30 13:17:03 25 4
gpt4 key购买 nike

我是核心数据新手。我注意到集合类型不能用作属性类型,并且想知道将数组/字典类型数据存储为属性的最有效方法是什么(例如构成街道、城市等地址的元素)不需要单独的实体,并且比单独的属性/字段更方便地存储为字典/数组)。谢谢。

最佳答案

核心数据中没有“ native ”数组或字典类型。您可以将 NSArrayNSDictionary 存储为可转换属性。这将使用 NSCoding 将数组或字典序列化为 NSData 属性(并在访问时对其进行适当的反序列化)。这种方法的优点是简单。缺点是您无法查询数组或字典(它在数据存储中存储为 BLOB),并且如果集合很大,您可能必须将大量数据移入/移出数据存储(如果是SQLite 数据存储)只是为了读取或修改集合的一小部分。

另一种方法是使用 Core Data 的多对多关系来对数组或字典集合的语义进行建模。数组更容易,所以让我们从数组开始。核心数据对多关系实际上是对集合进行建模,因此如果您需要类似数组的功能,则必须对集合进行排序(使用获取的属性是执行此操作的便捷方法)或向实体添加额外的索引属性存储数组项并自行管理索引。如果您存储同构数组(所有条目都是同一类型),则可以轻松为数组实体建模实体描述。如果没有,您必须决定是否使用可转换属性来存储项目数据或创建一系列项目实体。

对字典进行建模可能需要与存储键和值的一组实体建立一对多关系。键和值都类似于上面描述的数组的项目实体。因此,它们可以是 native 类型(如果您提前知道它们)、可转换属性或与特定类型实体系列中的实例的关系。

如果这一切听起来有点令人畏惧,确实如此。将任意数据硬塞到像 Core Data 这样依赖于模式的框架中是很困难的。

对于结构化数据(例如地址),花时间显式地对实体进行建模(例如地址每个部分的属性)几乎总是更容易。除了避免为字典建模的所有额外代码之外,这还使您的 UI 更容易(绑定(bind)将“正常工作”),并且您的验证逻辑等更清晰,因为其中大部分可以由 Core Data 处理。

更新

从 OS X 10.7 开始,Core Data 包含一个有序集类型,可以用来代替数组。如果您可以定位 10.7 或更高版本,那么这是有序(类似数组)集合的最佳解决方案。

关于objective-c - 最佳实践? - 数组/字典作为核心数据实体属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38110333/

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