Как получить уведомление об изменениях NSMutableArray, привязанного к NSArrayController?
У меня есть 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;
}
Но ни один из этих методов не вызывается при отправке сообщения add: NSArrayController. Я предполагаю, что путь ключа, который используется NSArrayController, не сопоставляется с этими методами, иначе они не соответствуют значению ключа. Как я могу узнать, когда объекты добавляются или удаляются из events
?
ОБНОВЛЕНИЕ: я перебрал синтезированный аксессор setEvents
и обнаружил, что контроллер массива использует этот метод каждый раз, когда добавляет объект в массив, которым он управляет. Таким образом, изменяемые индексированные средства доступа никогда даже не используются. Это не помогает мне, хотя, потому что я все еще не буду знать, какой объект был добавлен.
1 ответ
Мое решение было правильным, но я не реализовал все необходимые средства доступа.
Похоже, это минимальный набор методов доступа, которые должны быть реализованы.
- (void)insertObject:(id)object inEventsAtIndex:(NSUInteger)index;
- (id)objectInEventsAtIndex:(NSUInteger)index;
- (NSArray *)eventsAtIndexes:(NSIndexSet *)indexes;
- (void)removeObjectFromEventsAtIndex:(NSUInteger)index;
Если они есть, контроллер массива будет использовать их вместо метода установки для атрибута массива.