Swift:在Core Data中存储自定义类的数组

7

我对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类的关系(一对多)。 因此,我已经这样做了,结果如下:

enter image description here

这是添加自定义对象的数组的正确方式吗?如果是,请问如何继续(只需简单地点击'CreateNSManagedObject Subclass…'?)?如何将实例添加到数组中?如何读取它?

1个回答

3
你是正确的,将自定义数组存储在Core Data中需要创建Core Data对象,并通过关系将它们连接起来,就像您在发布的图表中所做的一样。
如何继续操作(只需简单地点击“CreateNSManagedObject Subclass…”?)?
现在你拥有一个对象图,下一步很大程度上取决于你是否使用Xcode 7或Xcode 8。如果使用前者,则应单击该创建子类按钮。然后,如果数据模型发生任何更改,您需要再次生成子类。
然而,在后者(Xcode 8)中,您只需要查看Core Data对象模型文件中选择实体时属性检查器中的“Codegen”下拉列表。如果选择“Class Definition”,则Xcode 8应该会为您生成类。“Category/Extension”意味着它将创建具有所有必要的Core Data访问代码的扩展,并且您需要声明实际的类定义。在这两种情况下(在Xcode 8中),当您更改对象模型时,它们会自动更新(目前仅在重建后才会更新,并且它们不可见)。

图片来自Core Data WWDC16 session

Xcode 8

我该如何阅读它?

假设您没有在Core Data中设置排序,它将以NSSet的形式返回,但您可以将其转换为数组:

reptileInstance.lengths.allObjects as! [Length]

如何将一个实例添加到数组中?

你可以简单地执行以下操作:

lengthInstance.reptile = reptileInstance

在这种情况下,lengthInstance将自动添加到reptileInstancelengths集合属性中,或者您可以在reptileInstance上设置一个新的NSSet来更改lengths

这只是一个非常简单的解释。您应该查看Core Data Programming Guide,但请注意,它可能还没有更新到即将发布的Xcode 8。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接