我一定错过了什么。我在Aaron Hillegass的Cocoa Programming中的“Key-Value Observing”一章中。
我已插入代码,使应用程序能够撤消/重做从RaiseMan中添加和减少员工。应用程序工作但我想知道为什么当我将“添加员工”链接到NSArrayController到ADD方法(使用.xib文件)时,它调用
- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index;
根据键值编码,不应该添加方法调用吗?
- (void)addEmployeesObject:newEmployee;
我正在链接'add'方法而不是'insert'方法。
答案 0 :(得分:1)
使用KVC collection accessor methods时,这是预期的行为。将对象插入所需位置(即使该位置在末尾)比在“想知道它是否在最后”并且直接调用-add ...更有效。所有这些很多比使用全新的(例如-setEmployees:)数组替换整个数组更有效,当已知修改范围时。 NSArrayController在将对象插入其控制的数组时最终使用此方法。
答案 1 :(得分:1)
您的数组控制器绑定到有序集合(数组)。这就是为什么它使用insertObject:inEmployeesAtIndex:
在集合的末尾添加一个新对象。
如果集合是无序的(即一组),将使用addEmployeesObject:
方法。