NSArrayController без массива
-
06-07-2019 - |
Вопрос
Я только что понял, что есть два способа использовать NSArrayController.
Привяжите контроллер к массиву and и добавьте объекты в массив.Или вообще не используйте никакой массив и добавляйте объекты непосредственно в контроллер.
[racesArray addObject: [[Race alloc] initWithName:@"Human"] ];
Или
[myRacesController addObject: [[Race alloc] initWithName:@"Human"] ];
Поскольку обе версии отлично подходят для моих нужд, я задаюсь вопросом, как правильно их использовать.Я предполагаю, что использование массива могло бы быть лучше, но поскольку NSArrayController также способен хранить данные, почему я не должен использовать эту функцию?
Решение
Не общайтесь напрямую с массивом, как вы делаете в своем первом примере.Контроллер массива не узнает о ваших изменениях, если вы явно не разместите уведомления KVO о них, что является проблемой, и легко забыть это сделать.
Способ, который я рекомендую, - это привязать контроллер массива, а затем реализовать Методы доступа к массиву, совместимые с KVC для вашего свойства и используйте их везде в вашем приложении (за исключением класса init
и dealloc
методы).
Таким образом, ваш объект может изменять свой собственный массив без необходимости явно публиковать уведомления KVO или знать о контроллере массива.
Другие советы
Оба способа хороши.Если вы не предоставите ему массив, NSArrayController
поддерживает свой собственный.
NSArrayController совместим с KVO для привязки к элементам пользовательского интерфейса.Он также содержит дополнительные метаданные для массива объектов, таких как selectedObject.Эти удобные объекты недоступны с NSArray.NSArray - это просто массив с обычными операторами массива и методами, определенными в нем.Используйте его, если вам не нужно привязываться к элементам пользовательского интерфейса.