Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 无阵列的NSArrayController_Cocoa_Cocoa Bindings_Nsarraycontroller - Fatal编程技术网

Cocoa 无阵列的NSArrayController

Cocoa 无阵列的NSArrayController,cocoa,cocoa-bindings,nsarraycontroller,Cocoa,Cocoa Bindings,Nsarraycontroller,我刚刚意识到使用NSArrayController有两种方法 [racesArray addObject: [[Race alloc] initWithName:@"Human"] ]; 将控制器绑定到和数组,并将对象添加到数组。或者根本不使用任何数组,直接向控制器添加对象 [racesArray addObject: [[Race alloc] initWithName:@"Human"] ]; 或 由于这两个版本都能很好地满足我的需要,我想知道哪一个是正确的使用方法。我想使用阵列可能更好

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

[racesArray addObject: [[Race alloc] initWithName:@"Human"] ];
将控制器绑定到和数组,并将对象添加到数组。或者根本不使用任何数组,直接向控制器添加对象

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


由于这两个版本都能很好地满足我的需要,我想知道哪一个是正确的使用方法。我想使用阵列可能更好,但既然NSArrayController也能够存储数据,为什么我不应该使用此功能

两种方法都可以。如果不给它一个数组,
NSArrayController
会维护自己的数组。

两种方法都可以。如果不给它一个数组,
NSArrayController
会维护自己的数组。

NSArrayController与KVO兼容,可以绑定UI元素。它还具有用于对象数组(如selectedObject)的附加元数据。这些方便对象不适用于NSArray。NSArray只是一个数组,上面定义了正则数组运算符和方法。如果不需要绑定UI元素,请使用它。

NSArrayController与KVO兼容,可以绑定UI元素。它还具有用于对象数组(如selectedObject)的附加元数据。这些方便对象不适用于NSArray。NSArray只是一个数组,上面定义了正则数组运算符和方法。如果不需要绑定UI元素,请使用它。

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

我推荐的方法是绑定数组控制器,然后为您的属性实现,并在应用程序中的任何位置使用这些控制器(类的
init
dealoc
方法除外)


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

不要像第一个示例中那样直接与阵列对话。除非您明确发布有关更改的KVO通知,否则阵列控制器将无法发现您的更改,这是一件麻烦事,而且很容易忘记

[racesArray addObject: [[Race alloc] initWithName:@"Human"] ];
我推荐的方法是绑定数组控制器,然后为您的属性实现,并在应用程序中的任何位置使用这些控制器(类的
init
dealoc
方法除外)


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

第一个示例非常好,因为数组绑定到
NSArrayController
。也没有必要实现与KVC兼容的阵列访问方法,因为
NSArrayController
已经提供了这些方法。换句话说,这个答案不应该被接受。第一个例子非常好,因为数组绑定到
NSArrayController
。也没有必要实现与KVC兼容的阵列访问方法,因为
NSArrayController
已经提供了这些方法。换句话说,这个答案不应该被接受。
[racesArray addObject: [[Race alloc] initWithName:@"Human"] ];