子类化一个 NSManagedObject 子类

Posted

技术标签:

【中文标题】子类化一个 NSManagedObject 子类【英文标题】:Subclass an NSManagedObject subclass 【发布时间】:2016-02-24 18:41:28 【问题描述】:

假设我有一个 NSManagedObject 子类 Instrument,我想将该子类子类化以创建类似 Guitar 的东西。这有一个常见的做法吗?它似乎不像继承 NSObject 那样简单。

【问题讨论】:

你觉得它在哪些方面不简单? 【参考方案1】:

对于托管对象子类,子类/父类关系 对应于子实体/父实体关系 核心数据实体。

如果您将“吉他”的“父实体”设置为“乐器” Core Data 模型检查器,然后创建托管对象子类 在 Xcode 中,你会得到

// Instrument.swift:
class Instrument: NSManagedObject 

// Insert code here to add functionality to your managed object subclass



// Guitar.swift:
class Guitar: Instrument 

// Insert code here to add functionality to your managed object subclass


有关详细信息,请参阅“实体继承”部分 在Core Data Programming Guide:

实体继承的工作方式与类继承类似,并且出于同样的原因也很有用。如果您有许多相似的实体,您可以将公共属性分解为一个超实体,也称为父实体。

还要注意

注意

在使用 SQLite 持久存储时要小心实体继承。从另一个实体继承的所有实体都将存在于 SQLite 的同一个表中。 SQLite 持久存储设计中的这一因素可能会产生性能问题。

【讨论】:

【参考方案2】:

这样做没有错:

class Instrument: NSManagedObject 
  @NSManaged var name: String


class Guitar: Instrument 
  @NSManaged var numberOfString: NSNumber

【讨论】:

以上是关于子类化一个 NSManagedObject 子类的主要内容,如果未能解决你的问题,请参考以下文章

NSLog'd 时子类化的 NSManagedObject 不调用描述

无法实例化 NSManagedObject 的子类

将 NSManagedObject 子类化 Core Data 对象打印到控制台在 Swift 中返回空行

为啥会有一个子类 NSManagedObject?

NSManagedObject 子类导致 NSInvalidArgumentException

我可以向 NSManagedObject 的子类的子类添加属性吗?