Как правильно определить, когда NSArrayController завершил загрузку своего содержимого из постоянного хранилища? - PullRequest
3 голосов
/ 29 мая 2009

Какой лучший способ узнать, когда мой контроллер массива, связанный с моим основным хранилищем данных, завершил загрузку его содержимого?

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

Я хочу отложить свои действия до тех пор, пока не узнаю, что контроллер имеет весь свой контент.

Ответы [ 2 ]

3 голосов
/ 29 мая 2009

Перемещение этого кода на -windowDidLoad обычно является безопасной ставкой, оно вызывается после того, как окно полностью загружено, по сравнению с -awakeFromNib, где вы можете столкнуться с проблемами, потому что порядок, в котором он вызывается для всех объектов в вашем кончике не определено.

В общем, неплохо бы запомнить все инициализируемые вами инициализации, каким частям необходим пользовательский интерфейс для правильной работы, какие части можно отложить до тех пор, пока пользователь не выполнит действие, и так далее. Например, хорошо откладывать такие задачи, как выборка основных данных, до последней минуты, если у вас когда-нибудь будет окно, которое не открывается, пока пользователь не запросит его. С другой стороны, иногда вы будете работать с таким объектом, как контурное представление, для которого необходимо предварительно заполнить источник данных, чтобы методы постоянства работали.

Как только вы знаете, что делаете и в каком порядке это нужно сделать, вы можете выбрать некоторую комбинацию init, awakeFromNib, yyyWillLoad или xxxDidLoad, и вы позаботитесь о многих подобных ошибках, прежде чем они есть шанс вызвать неприятности.

1 голос
/ 29 мая 2009

См. Theocacao для обсуждения этой проблемы

...