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

Kev*_*nck 7 arrays core-data custom-object swift

我是Core Data的新手,但对于我的新项目,我想将我的数据保存到Core Data.我想创建一个包含几个自定义类数组的Reptile类.没有核心数据我会有这样的事情:

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_]?

}
Run Code Online (Sandbox Code Playgroud)

例如,这个类Weight_看起来像这样:

import Foundation

class Weight_ {

    private var _date: NSDate?
    private var _weight: Double?

}
Run Code Online (Sandbox Code Playgroud)

我可以使用Core Data来保存单个类,其中包含一些属性如字符串,布尔数据......但我不知道如何保存自定义对象的数组?

我已经读过一些我需要用基Reptile类创建关系(一对多)的地方.所以我做了这个导致了这个:

在此输入图像描述

这是添加自定义对象数组的正确方法吗?如果是这样,我如何继续(只需单击' CreateNSManagedObject Subclass ... '?)?如何向阵列添加实例?我该怎么看?

Mat*_*man 3

您是正确的,在核心数据中拥有自定义数组包括为这些项目创建核心数据对象并通过关系连接它们,就像您在发布的图表中所做的那样。

如何继续(只需单击“CreateNSManagedObject Subclass...”?)?

现在您已经有了一个对象图,下一步很大程度上取决于您是否有 Xcode 7 还是 Xcode 8。如果是前者,您应该单击创建子类按钮。然后,如果数据模型发生任何变化,您将需要再次重新生成子类。

然而,在后者 (Xcode 8) 中,当在 Core Data 对象模型文件中选择实体时,您所需要做的就是查看属性检查器中的“Codegen”下拉列表。如果您选择“类定义”,Xcode 8 应该为您生成类。“类别/扩展”意味着它将创建一个包含核心数据访问所需的所有代码的扩展,并且您需要声明实际的类定义。无论哪种情况(在 Xcode 8 中),当您更改对象模型时,这些都会自动更新(目前仅在重建后,它们将不可见)。

图片来自Core Data WWDC16 会议

Xcode 8

我该如何阅读它?

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

reptileInstance.lengths.allObjects as! [Length]
Run Code Online (Sandbox Code Playgroud)

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

您可以做一些简单的事情,例如:

lengthInstance.reptile = reptileInstance
Run Code Online (Sandbox Code Playgroud)

在这种情况下lengthInstance会自动添加到 的lengths集合属性中reptileInstance,或者您可以设置一个新的NSSetlengthson reptileInstance

This is a very simplified explanation. You should check out the Core Data Programming Guide, but note it may or may not be yet updated for the upcoming Xcode 8.