没有数组的 NSArrayController
我刚刚意识到有两种方法可以使用 NSArrayController。
将控制器绑定到数组并将对象添加到数组中。或者根本不使用任何数组,直接将对象添加到控制器中。
[racesArray addObject: [[Race alloc] initWithName:@"Human"] ];
或者
[myRacesController addObject: [[Race alloc] initWithName:@"Human"] ];
由于这两个版本都可以很好地满足我的需求,我想知道哪种是正确的使用方法。我想使用数组可能会更好,但是既然 NSArrayController 也能够存储数据,为什么我不应该使用这个功能呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不要像第一个示例中那样直接与数组对话。除非您显式发布有关它们的 KVO 通知,否则阵列控制器不会发现您的更改,这是很麻烦并且很容易忘记这样做。
我推荐的方法是绑定数组控制器,然后实现 KVC - 兼容的数组访问器方法为您的属性,并在您的应用中的任何地方使用这些方法(类的
init
和dealloc
方法除外)。这样,您的对象就可以改变自己的数组,而无需显式发布 KVO 通知或了解数组控制器。
Don't directly talk to the array like you do in your first example. The array controller won't find out about your changes unless you explicitly post KVO notifications about them, which is a hassle and is easy to forget to do.
The way I recommend is to bind the array controller, then implement KVC-compliant array accessor methods for your property, and use those everywhere in your app (except in the class's
init
anddealloc
methods).That way, your object can mutate its own array without having to explicitly post KVO notifications or know about the array controller.
两种方式都很好。如果您不给它一个数组,
NSArrayController
会维护自己的数组。Both ways are fine. If you don't give it an array,
NSArrayController
maintains its own.NSArrayController 符合 KVO 规范,可与 UI 元素绑定。它还具有对象数组(例如 selectedObject)的附加元数据。 NSArray 不提供这些便利对象。 NSArray 只是一个数组,上面定义了常规数组运算符和方法。如果您不需要与 UI 元素绑定,请使用它。
The NSArrayController is KVO compliant for binding with UI elements. It also has additional meta data for an array of objects such as selectedObject. These convenience objects are not available with NSArray. NSArray is just an array with the regular array operators and methods defined on it. Use it if you don't have need to bind with UI elements.