2009-10-27 40 views
1

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

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

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

或者

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

由于两个版本,做工精细适合我的需要我不知道这是使用它的正确方法。我想使用数组可能会更好,但由于NSArrayController也能够存储数据,为什么我不应该使用此功能?

回答

2

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

我推荐的方法是在阵列控制器绑定,然后实现KVC-compliant array accessor methods为你的财产,并在您的应用程序使用这些无处不在(除了在类的initdealloc方法)。

这样,你的对象可以改变它自己的数组,而不必显式地发布KVO通知或者了解数组控制器。

1

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

0

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