Ваш контроллер массива наблюдает за свойством массива вашего делегата приложения. Это означает, что уведомления KVO отправляются только тогда, когда установлен объект массива, а не когда к нему добавляются объекты. Похоже, вы используете NSMutableArray и добавляете в него объекты, что объясняет, почему контроллер массива не уведомляется об изменениях, поскольку базовый объект не меняется.
Простое решение состоит в том, чтобы обернуть ваши звонки в блок воли / изменения, например:
[self willChangeValueForKey:@"array"];
[self.array addObject:[NSDictionary dictionaryWithObject:@"foo" forKey:@"name"]];
[self.array addObject:[NSDictionary dictionaryWithObject:@"bar" forKey:@"name"]];
[self didChangeValueForKey:@"array"];
Это вручную уведомляет наблюдателей об изменении свойства "array".
Длинный ответ: Вы делаете это неправильно. Весь смысл наличия контроллера массива состоит в том, чтобы перенести работу по управлению массивом на сам класс контроллера, чтобы он управлял базовым массивом, отправлял правильные уведомления, поддерживал состояние и т. Д., Не прибегая к потере деталей реализации. Лучшим решением было бы отцепить привязку массива контента и просто добавить объекты в контроллер массива, например, так:
[arrayController addObject:[NSDictionary dictionaryWithObject:@"foo" forKey:@"name"]];
[arrayController addObject:[NSDictionary dictionaryWithObject:@"bar" forKey:@"name"]];
Это работает, потому что контроллер массива управляет своим собственным массивом внутри.
Лучшее решение - использовать Core Data. NSArrayController предназначен для использования с ним. Вы также бесплатно получаете целый набор вещей, таких как постоянство, поддержка отмены, отношения объектов и возможность добавлять объекты без написания кода, просто вызывая add:
на контроллере массива непосредственно из элементов управления вашего пользовательского интерфейса.