2009-05-28 1 views
3

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

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

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

ответ

3

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

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

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

+1

@ctshryock: вы должны действительно рассмотреть этот ответ. Мой пост - это только ответ на ваш вопрос. Однако этот ответ описывает, что вы должны делать в реальном приложении. – cocoafan

+0

совет, спасибо вам обоим! – catsby

1

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

+0

Я не согласен с использованием отложенных сообщений, просто потому, что обычно лучше разместить эту логику (и по причинам, о которых говорится в комментариях к этой статье). –

+1

На самом деле, я посмотрел на уведомления KVO для NSArrayController (http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaBindings/Articles/ControllerKey-ValueObservingCompliance.html#//apple_ref/doc/uid/TP40002493-DontLinkElementID_3). Добавляя наблюдателей к нескольким, чтобы увидеть время, кажется, что «контент» запускается, когда происходит загрузка из магазина – catsby

Смежные вопросы