没有Array的NSArrayController

时间:2009-10-27 19:46:59

标签: cocoa cocoa-bindings nsarraycontroller

我刚刚意识到有两种方法可以使用NSArrayController。

将Controller绑定到和Array并将对象添加到Array。或者根本不使用任何数组,并将对象直接添加到Controller。

[racesArray addObject: [[Race alloc] initWithName:@"Human"] ];

或者

[myRacesController addObject: [[Race alloc] initWithName:@"Human"] ];

由于两个版本都能满足我的需求,我想知道哪种版本正确使用它。我想使用数组可能会更好但是因为NSArrayController也能够存储数据,为什么我不应该使用这个功能呢?

3 个答案:

答案 0 :(得分:2)

两种方式都很好。如果你没有给它一个数组,NSArrayController保持自己的数组。

答案 1 :(得分:2)

不要像在第一个示例中那样直接与数组对话。除非您明确发布有关它们的KVO通知,否则阵列控制器将无法找到您的更改,这很麻烦,很容易忘记。

我建议的方法是绑定数组控制器,然后为您的属性实现KVC-compliant array accessor methods,并在应用中的任何位置使用它们(类的initdealloc方法除外)

这样,您的对象可以改变自己的数组,而无需显式发布KVO通知或了解阵列控制器。

答案 2 :(得分:0)

NSArrayController符合KVO标准,用于绑定UI元素。它还具有对象数组的附加元数据,例如selectedObject。 NSArray不提供这些便利对象。 NSArray只是一个数组,其上定义了常规数组运算符和方法。如果您不需要与UI元素绑定,请使用它。