一尘不染

核心数据中具有自定义类型的所有属性都必须是一种关系吗?

swift

这是下面的注释中的后续问题,该注释如何映射嵌套的复杂JSON对象并将其保存到核心数据。

想象一下,我已经为我的应用准备了这段代码。

class Passenger{
    var name: String
    var number: String
    var image : UIImage
    // init method
}
class Trip {
    let tripNumber : Int
    let passenger : Passenger

    init(tripNumber: Int, passenger: Passenger) {
        self.tripNumber = tripNumber
        self.passenger = passenger
    }
}

现在,我决定为我的应用程序添加持久性。我只是
有旅行的表。我想显示出行旅客,但不需要表格直接查询旅客。这只是旅行的自定义对象/属性。每次我访问旅客时,都会通过Trips。

那么,有没有办法我可以创建一个名为’TripEntity’的NSManagedObject新子类并存储我的乘客-
无需1.为’Passenger’创建另一个NSManagedObject子类2.创建一个与Passenger和Trip之间具有反比关系的关系?简单地说,我只是希望它成为一个属性。从概念上讲,对我来说,这也是一个属性。这不是真正的关系…

还是在使用Core-data之后,每个自定义类型都需要明确地是NSManagedObject的子类?否则,它将不会持续存在。我猜这也是对象 图的
含义。您的图需要完整。图外的任何内容都将被忽略…

我之所以这样问,是因为我实际上要存储的JSON对象是巨大的,并且我正在尝试减少需要完成的工作。


阅读 213

收藏
2020-07-07

共1个答案

一尘不染

任何自定义属性都必须是可以表示为“核心数据”属性类型之一的东西。其中包括明显的东西,例如字符串和数值。它还包括“二进制”,这是可以在NSDataData在Swift中)进行转换的任何东西。

根据您的描述,最好的方法可能是

  1. 采用NSCoding您的Passenger类。
  2. 使passenger属性成为Core Data“可转换”类型。(顺便说一句,这应该是一排乘客吗?您有一个相关的乘客,但是您的问题将其描述为好像有一个以上的乘客)。
  3. 完成#2之后,将passenger属性的“ custom class”字段设置为您的类的名称- Passenger

如果您做这两件事,Core Data将自动调用NSCoding方法以在您的Passenger类和可以保存在Core Data中的二进制Blob之间进行转换。

2020-07-07