核心数据中具有自定义类型的所有属性都必须是一种关系吗?
这是下面的注释中的后续问题,该注释如何映射嵌套的复杂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对象是巨大的,并且我正在尝试减少需要完成的工作。
-
任何自定义属性都必须是可以表示为“核心数据”属性类型之一的东西。其中包括明显的东西,例如字符串和数值。它还包括“二进制”,这是可以在
NSData
(Data
在Swift中)进行转换的任何东西。根据您的描述,最好的方法可能是
- 采用
NSCoding
您的Passenger
类。 - 使
passenger
属性成为Core Data“可转换”类型。(顺便说一句,这应该是一排乘客吗?您有一个相关的乘客,但是您的问题将其描述为好像有一个以上的乘客)。 - 完成#2之后,将passenger属性的“ custom class”字段设置为您的类的名称-
Passenger
。
如果您做这两件事,Core Data将自动调用
NSCoding
方法以在您的Passenger
类和可以保存在Core Data中的二进制Blob之间进行转换。 - 采用