我有一个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
并发现每次将数组控件添加到它控制的数组时,数组控制器都会使用此方法。因此,甚至从未使用可变索引访问器。这对我没有帮助,因为我仍然不知道添加了哪个对象。
答案 0 :(得分:1)
我的解决方案是正确的,但我没有实现所有必要的访问者。
这似乎是应该实施的最小访问者集。
- (void)insertObject:(id)object inEventsAtIndex:(NSUInteger)index;
- (id)objectInEventsAtIndex:(NSUInteger)index;
- (NSArray *)eventsAtIndexes:(NSIndexSet *)indexes;
- (void)removeObjectFromEventsAtIndex:(NSUInteger)index;
如果存在这些,阵列控制器将使用它们而不是数组属性的setter getter。