NSArraycontroller доступ к контенту - PullRequest
0 голосов
/ 23 января 2011

Я подключаю контроллер массива (myArraycontroller) в Интерфейсном Разработчике к массиву (fileDictionariesArray), состоящему из словарей.Это работает нормально, но когда я пытаюсь получить доступ и перечислить содержимое контроллера массива [myArrayController arrangedObjects], я получаю ноль содержимого, пока не добавлю содержимое программно в мой массив контроллера, например:

[myArrayController addObjects:fileDictionariesArray];

После того, как у меня будетсделано, что я могу перебрать все содержимое.Проблема в том, что массив (fileDictionariesArray) был добавлен два раза.Один раз через привязку IB и один раз через addObjects.Я просто не могу получить доступ к arrayContoller, пока не установлю содержимое программно.Я могу удалить содержимое arrayController, а затем снова установить его программным способом, например, так:

[myArrayController setContent:nil];
[myArrayController addObjects:fileDictionariesArray];

, который дает правильное количество элементов в arrayController, но это не похоже на правильный способ сделать это.Я был бы признателен, если бы кто-нибудь дал мне подсказку о том, как получить доступ к моему arrayController с помощью массива layoutObjects, не добавляя содержимое два раза.

Спасибо за вашу помощь.Приветствия, Тронд Кристиансен

1 Ответ

0 голосов
/ 23 января 2011

Судя по вашему сообщению и комментариям между вами и Bavarious, я убежден, что он не должен был удалять свой ответ. Он спросил вас, где вы вызываете этот код (от -awakeFromNib?). Это важный вопрос для ответа.

Если вы вызываете это из -awakeFromNib, то возникает следующий вопрос: «какой объект в кончике? Владелец? Какой-то другой контроллер? Что такое документ?"

Дело в том, что контроллер массива, скорее всего, не успевает наблюдать "изменения" в массиве, прежде чем вы вызовете свой код. Вот почему добавление контента принудительно приводит к его добавлению дважды (потому что после того, как вы закончите, контроллер массива наблюдает за своим массивом контента и извлекает контент ... снова ... в этот момент вы удвоили содержимое массива) .

Если вы занимаетесь немедленным запуском, лучше всего работать непосредственно с массивом. В этом нет ничего «неправильного» или «грязного», если вы оставите ответственность за контроллер массива после завершения запуска.

Трудно сказать что-то более конкретное, потому что я просто догадываюсь, что вы делаете. Измените свой вопрос, чтобы включить более полное описание того, как / где контроллер массива вписывается в архитектуру, что конкретно вы делаете с массивом при запуске и т. Д. Пропуск любой из этой информации вызывает слишком много догадок.

...