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
方法。由于两个自定义初始化器都使用此方法,因此我假设/认为将安装两个对象