Swift:在Core Data中存储自定义类的数组
Swift: Store arrays of custom classes in Core Data
我是 Core Data 的新手,但对于我的一个新项目,我想将我的数据保存到 Core Data。
我想创建一个包含几个自定义 class 数组的 Reptile-class。如果没有核心数据,我会得到这样的东西:
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_]?
}
例如class Weight_
看起来像这样:
import Foundation
class Weight_ {
private var _date: NSDate?
private var _weight: Double?
}
我可以使用 Core Data 来保存单个 class 以及一些属性,如字符串、布尔数据...但是我不知道如何保存自定义对象的数组?
我在某处读到我需要与基础 Reptile
class 创建关系(一对多)。所以我做了这件事:
这是添加自定义对象数组的正确方法吗?如果是这样,我该如何继续(只需单击“CreateNSManagedObject Subclass...”?)?如何将实例添加到数组?如何阅读?
您是正确的,在 Core Data 中拥有自定义数组包括为这些项目创建 Core Data 对象并通过关系连接它们,就像您在发布的图表中所做的那样。
How do I continue (simply click 'CreateNSManagedObject Subclass...'?)?
现在你有了一个对象图,下一步很大程度上取决于你有Xcode7还是Xcode8。如果是前者,你应该点击create subclass 按钮。然后,如果您的数据模型发生任何变化,您将需要重新生成子classes。
在后者 (Xcode 8) 中,然而,当一个实体在 selected核心数据对象模型文件。如果你 select "Class Definition",Xcode 8 应该为你生成 class。 "Category/Extension" 意味着它将创建一个扩展,其中包含访问核心数据所需的所有代码,您需要声明实际的 class 定义。在任何一种情况下(在 Xcode 8 中),当您更改对象模型时,这些都会自动更新(目前仅在重建之后,它们将不可见)。
How do I read it?
假设您没有在 Core Data 中设置排序,它会以 NSSet
的形式返回,但您可以将其转换为数组:
reptileInstance.lengths.allObjects as! [Length]
How do I add a instance to the array?
您可以做一些简单的事情,例如:
lengthInstance.reptile = reptileInstance
在这种情况下,lengthInstance
将自动添加到 reptileInstance
的 lengths
集合 属性 中,或者您可以将新的 NSSet
设置为 lengths
在 reptileInstance
.
这是一个非常简单的解释。您应该查看 Core Data Programming Guide,但请注意它可能会或可能不会为即将到来的 Xcode 8.
更新
我是 Core Data 的新手,但对于我的一个新项目,我想将我的数据保存到 Core Data。 我想创建一个包含几个自定义 class 数组的 Reptile-class。如果没有核心数据,我会得到这样的东西:
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_]?
}
例如class Weight_
看起来像这样:
import Foundation
class Weight_ {
private var _date: NSDate?
private var _weight: Double?
}
我可以使用 Core Data 来保存单个 class 以及一些属性,如字符串、布尔数据...但是我不知道如何保存自定义对象的数组?
我在某处读到我需要与基础 Reptile
class 创建关系(一对多)。所以我做了这件事:
这是添加自定义对象数组的正确方法吗?如果是这样,我该如何继续(只需单击“CreateNSManagedObject Subclass...”?)?如何将实例添加到数组?如何阅读?
您是正确的,在 Core Data 中拥有自定义数组包括为这些项目创建 Core Data 对象并通过关系连接它们,就像您在发布的图表中所做的那样。
How do I continue (simply click 'CreateNSManagedObject Subclass...'?)?
现在你有了一个对象图,下一步很大程度上取决于你有Xcode7还是Xcode8。如果是前者,你应该点击create subclass 按钮。然后,如果您的数据模型发生任何变化,您将需要重新生成子classes。
在后者 (Xcode 8) 中,然而,当一个实体在 selected核心数据对象模型文件。如果你 select "Class Definition",Xcode 8 应该为你生成 class。 "Category/Extension" 意味着它将创建一个扩展,其中包含访问核心数据所需的所有代码,您需要声明实际的 class 定义。在任何一种情况下(在 Xcode 8 中),当您更改对象模型时,这些都会自动更新(目前仅在重建之后,它们将不可见)。
How do I read it?
假设您没有在 Core Data 中设置排序,它会以 NSSet
的形式返回,但您可以将其转换为数组:
reptileInstance.lengths.allObjects as! [Length]
How do I add a instance to the array?
您可以做一些简单的事情,例如:
lengthInstance.reptile = reptileInstance
在这种情况下,lengthInstance
将自动添加到 reptileInstance
的 lengths
集合 属性 中,或者您可以将新的 NSSet
设置为 lengths
在 reptileInstance
.
这是一个非常简单的解释。您应该查看 Core Data Programming Guide,但请注意它可能会或可能不会为即将到来的 Xcode 8.
更新