2012-11-05 41 views
1

我有一個NSArrayController的內容數組綁定到文件的所有者(我的窗口控制器)與模型的關鍵路徑設置爲chartData.events chartData是NSObject的一個子類和事件是一個合成的NSMutableArray屬性。如何通知綁定到NSArrayController的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或從中刪除?

UPDATE: 我推翻合成存取setEvents,結果發現,該陣列控制器使用該方法,每次是將對象添加到它所控制的陣列。因此,可變索引訪問器永遠不會被使用。這並不能幫助我,因爲我仍然不知道添加了哪個對象。

回答

1

我的解決方案是正確的,但我沒有實現全部必要的訪問器。

這似乎是應該實現的訪問器的最小集合。

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

如果這些到位,數組控制器將使用它們而不是setter getter作爲數組屬性。

相關問題