Swift:在 Core Data 中存储自定义类的数组
Posted
技术标签:
【中文标题】Swift:在 Core Data 中存储自定义类的数组【英文标题】:Swift: Store arrays of custom classes in Core Data 【发布时间】:2016-09-05 14:20:49 【问题描述】:我是 Core Data 的新手,但对于我的一个新项目,我想将我的数据保存到 Core Data。 我想创建一个包含几个自定义类数组的 Reptile 类。如果没有 Core Data,我会有这样的东西:
import Foundation
import UIKit
class Reptile_
private var _name: String?
private var _dateOfBirth: String?
private var _morph: String?
private var _breed: String?
private var _feedingPeriodInDays: Int?
private var _reminderTime: NSDate?
private var _idealTemperatureAtDay: String?
private var _idealTemperatureAtNight: String?
private var _gender: Gender?
private var _image: UIImage?
private var _imageHeader: UIImage?
private var _sheddings: [Shedding_]?
private var _feedings: [Feeding_]?
private var _defecations: [Defecation_]?
private var _weights: [Weight_]?
private var _lengths: [Length_]?
private var _others: [Others_]?
例如Weight_
类看起来像这样:
import Foundation
class Weight_
private var _date: NSDate?
private var _weight: Double?
我可以使用 Core Data 将具有某些属性的单个类保存为字符串、布尔数据……但我不知道如何保存自定义对象的数组?
我在某处读到需要使用基本 Reptile
类创建关系(一对多)。所以我做了这导致了这个:
这是添加自定义对象数组的正确方法吗?如果是这样,我该如何继续(只需单击“CreateNSManagedObject Subclass...”?)?如何将实例添加到数组?如何阅读?
【问题讨论】:
【参考方案1】:您是正确的,在 Core Data 中拥有自定义数组包括为这些项目创建 Core Data 对象并通过关系将它们连接起来,就像您在您发布的图表中所做的那样。
如何继续(只需单击“CreateNSManagedObject Subclass...”?)?
现在您已经有了一个对象图,下一步很大程度上取决于您使用的是 Xcode 7 还是 Xcode 8。对于前者,您应该单击创建子类按钮。然后,如果您的数据模型发生任何变化,您将需要重新生成子类。
然而,在后者(Xcode 8)中,当在 Core Data 对象模型文件中选择实体时,您需要做的就是查看属性检查器中的“Codegen”下拉菜单。如果您选择“类定义”,Xcode 8 应该会为您生成类。 “Category/Extension”意味着它将创建一个包含访问 Core Data 所需的所有代码的扩展,并且您需要声明实际的类定义。无论哪种情况(在 Xcode 8 中),这些都会在您更改对象模型时自动更新(目前仅在重建之后,并且它们不可见)。
图片来自Core Data WWDC16 session
如何阅读?
假设您尚未在 Core Data 中设置排序,它将以 NSSet
的形式返回,但您可以将其转换为数组:
reptileInstance.lengths.allObjects as! [Length]
如何将实例添加到数组中?
你可以做一些简单的事情,比如:
lengthInstance.reptile = reptileInstance
在这种情况下,lengthInstance
将自动添加到reptileInstance
的lengths
集合属性中,或者您可以在reptileInstance
上将新的NSSet
设置为lengths
。
这是一个非常简单的解释。您应该查看Core Data Programming Guide,但请注意它可能会或可能不会针对即将推出的 Xcode 8 进行更新。
【讨论】:
以上是关于Swift:在 Core Data 中存储自定义类的数组的主要内容,如果未能解决你的问题,请参考以下文章
iOS:Swift:Core Data:值不使用 Private ManagedObjectContext 存储