初始化NSManagedObject子类时的继承

时间:2015-02-09 23:05:08

标签: ios swift inheritance core-data

假设我有一个名为NSManagedObject的{​​{1}}子类,以及一个名为MyObject的子类。

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

如何正确使用继承在NSEntityDescription.insertNewObjectForEntityForName对象中设置MyObject属性?

我应该在User方法中创建新的MyObject,从这个新对象设置User属性,然后移除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”] } 上调用createInManagedObjectContext时,尽管使用了override关键字,但User中的属性“属性”仍未设置。我错过了什么?

由于

2 个答案:

答案 0 :(得分:0)

如果UserMyObject的子类,则User 的任何实例也是MyObject的实例。由于User继承自MyObject,所有User个实例都在MyObject上定义了所有属性。

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

根据代码段进行更新:

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

但是,由于User 也是 MyObject的实例,您无需调用该方法为property设置值即可。您可以重写User版本,如下所示:

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”]
}

答案 1 :(得分:0)

所以我通过添加label属性并调用传递标签的相关超类方法来修复此问题。

相关问题