2015-02-09 219 views
0

假設我有一個NSManagedObject的子類MyObject和一個子類User初始化NSManagedObject子類時的繼承

這些子類中的每一個都有一個特定的插入方法,稱爲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,即使使用了override關鍵字,MyObject中的屬性「屬性」仍未設置。我錯過了什麼?

感謝

回答

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」] 
} 
+0

我覺得我的困惑在於'insertNewObjectForEntityForName'方法。由於這兩個自定義初始化程序都使用這種方法,導致我認爲/認爲兩個對象會受到攻擊 – 2015-02-09 23:23:56

+0

請參閱代碼示例更新 – 2015-02-10 03:07:33

0

所以我加入了label屬性,並調用相關的父類的方法,通過在標籤上解決了這個問題。