Cocoa 如何通知绑定到NSArrayController的NSMutableArray的更改?
我有一个NSArrayController,它的内容数组绑定到文件的所有者(我的窗口控制器),模型密钥路径设置为chartData。events chartData是NSObject的子类,events是合成的NSMutableArray属性 chartData需要知道NSArrayController何时向events属性添加和删除事件对象。我想我应该通过实现可变索引访问器来实现这一点。我将此应用于我的chartData类实现中:Cocoa 如何通知绑定到NSArrayController的NSMutableArray的更改?,cocoa,cocoa-bindings,key-value-coding,Cocoa,Cocoa Bindings,Key Value Coding,我有一个NSArrayController,它的内容数组绑定到文件的所有者(我的窗口控制器),模型密钥路径设置为chartData。events chartData是NSObject的子类,events是合成的NSMutableArray属性 chartData需要知道NSArrayController何时向events属性添加和删除事件对象。我想我应该通过实现可变索引访问器来实现这一点。我将此应用于我的chartData类实现中: - (void)insertObject:(TNLEvent
- (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使用的密钥路径没有映射到这些方法,或者它们不符合键值。如何知道对象何时添加到事件中或何时从事件中删除
更新:
我重写了合成的访问器setEvents
,发现数组控制器每次向其控制的数组添加对象时都使用此方法。因此,可变索引访问器甚至从未使用过。这对我没有帮助,因为我仍然不知道添加了哪个对象。我的解决方案是正确的,但我没有实现所有必要的访问器
这似乎是应该实现的最小访问器集
- (void)insertObject:(id)object inEventsAtIndex:(NSUInteger)index;
- (id)objectInEventsAtIndex:(NSUInteger)index;
- (NSArray *)eventsAtIndexes:(NSIndexSet *)indexes;
- (void)removeObjectFromEventsAtIndex:(NSUInteger)index;
如果这些设置到位,数组控制器将使用它们,而不是数组属性的setter getter。我的解决方案是正确的,但我没有实现所有必要的访问器
这似乎是应该实现的最小访问器集
- (void)insertObject:(id)object inEventsAtIndex:(NSUInteger)index;
- (id)objectInEventsAtIndex:(NSUInteger)index;
- (NSArray *)eventsAtIndexes:(NSIndexSet *)indexes;
- (void)removeObjectFromEventsAtIndex:(NSUInteger)index;
如果这些设置到位,数组控制器将使用它们,而不是数组属性的setter-getter