Вам не нужен источник данных, если вы используете привязки. Один или другой.
У меня есть контроллер массива, связанный с "AppDelegate.self.lines" ...
Почему self
?
@ свойство (перезаписать, сохранить) NSArray * lines;
Нет, используйте copy
здесь. В противном случае вы обнаружите, что сохраняете чей-либо изменяемый массив, который затем будет мутировать. Тогда «ваш» массив изменится без вашего ведома.
Тогда у меня есть метод, который устанавливает массив строк:
lines = [fileContents componentsSeparatedByString:@"\n"];
Вот почему таблица ничего не показывает. Вы не просматриваете свойство, вы обращаетесь к переменной экземпляра напрямую. Прямой доступ к переменным экземпляра не вызывает уведомлений KVO, поэтому контроллер массива никогда не узнает об изменении.
Хуже того, вы теряете старый массив (поскольку вы просто присваиваете ему, не освобождая его) и недостаточно сохраняете этот новый массив. Поскольку вы не сохраняете новый массив, эта переменная экземпляра вскоре будет содержать мертвый объект. Автоматическое сохранение выполняется методом setLines:
, который вызывается только при его вызове.
Вам необходимо пройти через свойство:
self.lines = [fileContents componentsSeparatedByString:@"\n"];
Доступ к свойству - это неявное сообщение доступа, поэтому оно сохраняет массив (или копирует его, как только вы исправите @property
, как я предлагал выше), и отправляет уведомления KVO.