2015-02-09 5 views
0

Скажем, у меня есть подкласс NSManagedObject, называемый MyObject, и подкласс, который называется User.Наследование при инициализации подкласса NSManagedObject

Каждый из этих подклассов имеет конкретный метод вставки, называемый class func createInManagedObjectContext(managedObjectContext: NSManagedObjectContext, propertiesDictionary: NSDictionary) -> User/MyObject?, который сам использует метод NSEntityDescription.insertNewObjectForEntityForName для вставки нового объекта.

Как правильно использовать наследование для установки свойств MyObject в объекте User?

Должен ли я создать новый MyObject в методе User, установите User свойства этого нового объекта затем удалить MyObject поэтому он не спасутся? Или я пытаюсь изобрести колесо здесь?

Update с кодом:

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 на User, свойство 'property' в MyObject не устанавливается, несмотря на то, что используется ключевое слово переопределения. Что мне не хватает?

Благодаря

ответ

0

Если User является подклассом MyObject, то любой экземпляр Userявляется также экземпляром MyObject. Поскольку User наследует от MyObject, все экземпляры User имеют все свойства, определенные на MyObject.

Итак, вы создаете экземпляр User, а затем задаете все его свойства, включая те, которые определены для MyObject. Вам не нужно создавать два экземпляра для использования наследования.

Update, основываясь на фрагменте кода:

Ваш 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”] 
} 
+0

Я думаю, что мое замешательство связано с методом 'insertNewObjectForEntityForName'. Поскольку оба пользовательских инициализатора используют этот метод, чтобы я предположил/подумал, что будут обнаружены два объекта. –

+0

. См. Обновление с примером кода. –

0

Так я исправила эту проблему, добавив label свойства и вызов метод Передавая соответствующий суперкласс на этикетке.

Смежные вопросы