我有一个NSArrayController,其内容数组绑定到文件的所有者(我的窗口控制器),并且模型键路径设置为chartData.events chartData是NSObject的子类,而events是合成的NSMutableArray属性。

chartData需要知道NSArrayController何时将事件对象添加到events属性。我认为我应该通过实现可变的索引访问器来做到这一点。我将其放入我的chartData类实现中:

- (void)insertObject:(TNLEvent *)event inEventsAtIndex:(NSUInteger)index {
    [self.events insertObject:event atIndex:index];
    return;
}

- (void)insertEvents:(NSArray *)eventArray atIndexes:(NSIndexSet *)indexes {
    [self.events insertObjects:eventArray atIndexes:indexes];
    return;
}


但是,发送NSArrayController的add:消息时,不会调用这些方法。我假设NSArrayController使用的键路径未映射到那些方法,否则它们不符合键值。我如何知道何时将对象添加到events或从中删除?

更新:
我覆盖了综合访问器setEvents,发现每次将一个对象添加到它控制的数组时,数组控制器都使用此方法。因此,甚至不会使用可变索引访问器。但这对我没有帮助,因为我仍然不知道添加了哪个对象。

最佳答案

我的解决方案是正确的,但是我没有实现所有必要的访问器。

这似乎是应该实施的最少访问器集。

- (void)insertObject:(id)object inEventsAtIndex:(NSUInteger)index;
- (id)objectInEventsAtIndex:(NSUInteger)index;
- (NSArray *)eventsAtIndexes:(NSIndexSet *)indexes;
- (void)removeObjectFromEventsAtIndex:(NSUInteger)index;


如果这些到位,则阵列控制器将使用它们,而不是将setter getter用于array属性。

关于cocoa - 如何通知绑定(bind)到NSArrayController的NSMutableArray的更改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13235524/

10-10 16:44