Ios 初始化NSManagedObject子类时的继承

Ios 初始化NSManagedObject子类时的继承,ios,swift,inheritance,core-data,Ios,Swift,Inheritance,Core Data,假设我有一个子类NSManagedObject,叫做MyObject,还有一个子类叫做User 这些子类中的每一个子类都有一个名为class func createInManagedObjectContext(managedObjectContext:NSManagedObjectContext,propertiesDictionary:NSDictionary)->User/MyObject?的特定插入方法,该方法本身使用NSEntityDescription.insertNewObjectF

假设我有一个子类
NSManagedObject
,叫做
MyObject
,还有一个子类叫做
User

这些子类中的每一个子类都有一个名为
class func createInManagedObjectContext(managedObjectContext:NSManagedObjectContext,propertiesDictionary:NSDictionary)->User/MyObject?
的特定插入方法,该方法本身使用
NSEntityDescription.insertNewObjectForEntityForName
方法插入新实体

如何正确使用继承来设置
User
对象中的
MyObject
属性

我是否应该在
User
方法中创建一个新的
MyObject
,从这个新对象中设置
User
属性,然后删除
MyObject
,这样它就不会被保存?还是我想在这里重新发明轮子

更新代码:

class func createInManagedObjectContext(managedObjectContext: NSManagedObjectContext, propertiesDictionary: NSDictionary) -> MyObject?
{
    let newObject = NSEntityDescription.insertNewObjectForEntityForName("MyObject", inManagedObjectContext: managedObjectContext) as MyObject

    newObject.property = propertiesDictionary[“property”]
}




override class func createInManagedObjectContext(managedObjectContext: NSManagedObjectContext, propertiesDictionary: NSDictionary) -> User?
{
    let newObject = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: managedObjectContext) as User

    newObject.name = propertiesDictionary[“name”]
}
这就是我的代码结构。但是,当我在
User
上调用
createInManagedObjectContext
时,
MyObject
中的属性“property”不会被设置,尽管使用了override关键字。我错过了什么


谢谢

如果
User
MyObject
的子类,那么
User
的任何实例都是
MyObject
的实例。由于
User
继承自
MyObject
,因此所有
User
实例都在
MyObject
上定义了所有属性

因此,您可以创建
User
的实例,然后设置其所有属性,包括为
MyObject
定义的属性。使用继承不需要创建两个实例

更新,基于代码段:

您的
createInManagedObjectContext
是一个自定义方法。除非你打电话,否则它不会被呼叫。如果在
User
上调用此方法,则没有理由自动调用
MyObject
版本。因此,在
User
上调用该方法将不会在该代码中设置
property

但是,由于
用户
也是
MyObject
的一个实例,您不需要调用该方法来设置
属性的值。您可以将
用户
版本重写为如下所示:

override class func createInManagedObjectContext(managedObjectContext: NSManagedObjectContext, propertiesDictionary: NSDictionary) -> User?
{
    let newObject = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: managedObjectContext) as User

    newObject.property = propertiesDictionary[“property”]
    newObject.name = propertiesDictionary[“name”]
}

因此,我通过添加一个
标签
属性,并调用传递标签的相关超类的方法,解决了这个问题。

我认为我的困惑在于
insertNewObjectForEntityForName
方法。由于两个自定义初始化器都使用此方法,因此我假设/认为将安装两个对象