假设我有一个名为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
中的属性“属性”仍未设置。我错过了什么?
由于
答案 0 :(得分:0)
如果User
是MyObject
的子类,则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
属性并调用传递标签的相关超类方法来修复此问题。