Как получить уведомление об изменениях 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;

Если они есть, контроллер массива будет использовать их вместо метода установки для атрибута массива.

Другие вопросы по тегам