1

我有一个 NSArrayController,其内容数组绑定到文件所有者(我的窗口控制器),模型键路径设置为 chartData.events chartData 是 NSObject 的子类,事件是合成的 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,发现数组控制器每次都使用此方法将一个对象添加到它控制的数组中。因此,甚至从未使用可变索引访问器。但这对我没有帮助,因为我仍然不知道添加了哪个对象。

4

1 回答 1

1

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

这似乎是应该实现的最小访问器集。

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

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

于 2012-11-06T05:50:50.397 回答