如何通知绑定到NSArrayController的NSMutableArray的更改?

时间:2012-11-05 15:47:05

标签: cocoa cocoa-bindings key-value-coding

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

chartData需要知道NSArrayController何时向event属性添加和删除事件对象。我认为我应该通过实现可变索引访问器来实现这一点。我把它放到我的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并发现每次将数组控件添加到它控制的数组时,数组控制器都会使用此方法。因此,甚至从未使用可变索引访问器。这对我没有帮助,因为我仍然不知道添加了哪个对象。

1 个答案:

答案 0 :(得分:1)

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

这似乎是应该实施的最小访问者集。

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

如果存在这些,阵列控制器将使用它们而不是数组属性的setter getter。