Aaron Hillegass :: [NSArrayController add] = insertObject方法

时间:2012-06-25 13:36:52

标签: objective-c cocoa cocoa-bindings

我一定错过了什么。我在Aaron Hillegass的Cocoa Programming中的“Key-Value Observing”一章中。

我已插入代码,使应用程序能够撤消/重做从RaiseMan中添加和减少员工。应用程序工作但我想知道为什么当我将“添加员工”链接到NSArrayController到ADD方法(使用.xib文件)时,它调用

- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index;

根据键值编码,不应该添加方法调用吗?

- (void)addEmployeesObject:newEmployee;

我正在链接'add'方法而不是'insert'方法。

2 个答案:

答案 0 :(得分:1)

使用KVC collection accessor methods时,这是预期的行为。将对象插入所需位置(即使该位置在末尾)比在“想知道它是否在最后”并且直接调用-add ...更有效。所有这些很多比使用全新的(例如-setEmployees:)数组替换整个数组更有效,当已知修改范围时。 NSArrayController在将对象插入其控制的数组时最终使用此方法。

答案 1 :(得分:1)

您的数组控制器绑定到有序集合(数组)。这就是为什么它使用insertObject:inEmployeesAtIndex:在集合的末尾添加一个新对象。

如果集合是无序的(即一组),将使用addEmployeesObject:方法。