2013-12-08 26 views
0

我發現我的子類的操作系統NSTreeController運行newObject只有當add:方法被調用,但從來沒有爲addChild:NSTreeController的addChild:不調用NEWOBJECT但增加:確實(類/對象模式)

我發現this thread討論非常同樣的問題。雖然在這種情況下,用戶在覈心數據模式下使用樹形控制器,但是我有我的設置使用特定的類(對象模式)。

addChild:不使用newObject方法會有什麼原因?

如果newObject被要求爲add:我看不出爲什麼它不應該爲addChild:工作。我在Apple的SourceView演示應用程序中確認了此行爲,方法是將OutlineController替換爲子類,並將按鈕連接到add:addChild: - 同樣只有add:調用newObject。我覺得這真的很奇怪。

回答

1

實測值的answer in the docs

的add:和插入:操作使用NEWOBJECT方法來創建被添加到集合中的 對象。在對象模式下,addChild:, 和insertChild:創建由objectClass, 指定的類的對象,但不使用newObject方法來執行此操作。

至少它說的就是這樣。雖然它與類參考相矛盾。他們忽略瞭解釋爲什麼它是這樣。

+0

我推測它與避免initWithEntity有關,當插入的孩子可以是幾個子類時,但我很難將這種猜測與可怕的文檔調和起來。 – stevesliva

0

addChild有什麼理由:不使用newObject方法?

這取決於上下文。如果NSTreeController正在與普通舊對象交談,則-addChild的上下文中運行-newObject,因爲給定已知的-objectClass,樹控制器具有它將所有信息放在正確位置所需的所有信息。

如果NSTreeController在談論到NSManagedObjectContext,不會運行-newObject,因爲-newObject實施將沒有足夠的背景下,建立與選擇的關係,關係一定要一次到位-addChild:完成。

+0

無論哪個上下文(coredata/managed或objectClass)addChild:永遠不會發送newObject消息(請參閱我的回答,編程指南中說addChild:不會發出newObject,而類引用說明相反) – LearnCocos2D

相關問題