NSTreeController addChild:不调用newObject但添加:does(类/对象模式)

时间:2013-12-08 13:56:38

标签: objective-c cocoa cocoa-bindings nstreecontroller

我注意到我的子类os NSTreeController仅在调用newObject方法时运行add:但从不用于addChild:

我发现this thread讨论了同样的问题。虽然在这种情况下用户在Core Data模式下使用树控制器,但是我已经设置为使用特定的Class(对象模式)。

addChild:没有使用newObject方法的原因是什么?

如果为newObject调用add:,我认为没有理由说它不适用于addChild:。我在Apple的SourceView演示应用程序中通过将OutlineController替换为子类,并将按钮连接到add:addChild: - 再次仅add:调用newObject来确认此行为。我觉得这真的很奇怪。

2 个答案:

答案 0 :(得分:1)

找到answer in the docs

  

add:和insert:actions使用newObject方法创建   添加到集合的对象。在对象模式下addChild:,   和insertChild:创建objectClass指定的类的对象,   但不要使用newObject方法。

至少它说是这样的。虽然它与Class Reference相矛盾。他们忽略了解释为什么会这样。

答案 1 :(得分:0)

  

addChild的原因是什么:不使用newObject方法?

这取决于背景。如果NSTreeController正在与普通旧对象交谈,则 将在-newObject的上下文中运行-addChild,因为已知-objectClass,树控制器具有所需的所有信息,以便将所有内容放在正确的位置。

如果NSTreeController正在与NSManagedObjectContext,通话,则运行-newObject,因为-newObject实施将没有足够的上下文建立与选择的关系,一旦-addChild:完成,关系必须到位。