我是核心数据的新手。我注意到集合类型不能用作属性类型,并且想知道将数组/字典类型数据存储为属性的最有效方法是什么(例如,构成街道、城市等地址的元素确实如此不需要单独的实体,并且比单独的属性/字段更方便地存储为字典/数组)。谢谢你。
Core Data 中没有“本机”数组或字典类型。您可以将 anNSArray或 an存储NSDictionary为可转换的属性。这将使用 将NSCoding数组或字典序列化为NSData属性(并在访问时适当地反序列化它)。这种方法的优点是简单。缺点是您无法查询数组或字典(它在数据存储中存储为 BLOB),如果集合很大,您可能必须将大量数据移入/移出数据存储(如果它是SQLite 数据存储)只是为了读取或修改集合的一小部分。
NSArray
NSDictionary
NSCoding
NSData
The alternative is to use Core Data to-many relationships to model the semantics of the array or dictionary collection. Arrays are easier, so lets start with that. Core Data to-many relationships are really modelling a set, so if you need array-like functionality, you have to either sort the set (using a fetched property is a convenient way to do this) or add an extra index attribute to the entity that stores the array items and manage the indexes yourself. If you are storing a homogeneous array (all entries are the same type), it’s easy to model the entity description for the array entities. If not, you’ll have to decide whether to use a transformable attribute to store the item data or create a family of item entities.
对字典进行建模可能需要与一组存储键和值的实体建立一对多关系。键和值都类似于上面描述的数组的项目实体。因此它们可以是原生类型(如果您提前知道它们)、可转换的属性或与特定类型实体系列中的实例的关系。
如果这一切听起来有点令人生畏,那就是。将任意数据硬塞到像 Core Data 这样依赖于模式的框架中是很困难的。
对于结构化数据,如地址,几乎总是更容易花时间对实体进行显式建模(例如地址的每个部分的属性)。除了避免为字典建模的所有额外代码之外,这还使您的 UI 更容易(绑定将“正常工作”)并且您的验证逻辑等更加清晰,因为其中大部分可以由 Core Data 处理。
更新
从 OS X 10.7 开始,Core Data 包含一个有序集合类型,可以用来代替数组。如果您可以针对 10.7 或更高版本,这是有序(类似数组)集合的最佳解决方案。