Как отправить сообщение при запуске приложения сразу после загрузки основного объекта данных? - PullRequest
0 голосов
/ 27 декабря 2010

Метод applicationDidFinishLaunching: вызывается в делегате приложения перед загрузкой объекта Core Data в таблицу, созданную с помощью инструмента «Core Data Entity» в библиотеке Interface Builder.

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

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

1 Ответ

2 голосов
/ 27 декабря 2010

Мне понадобилось время, чтобы понять это, так как я относительно новичок в Какао.Соответствующая документация находится здесь: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdBindings.html

Если флаг «автоматически подготавливает содержимое» (см., Например, setAutomaticsPreparesContent :) для контроллера, начальное содержимое контроллера выбирается из его управляемогоконтекст объекта с использованием текущего предиката выборки контроллера.Важно отметить, что выборка контроллера выполняется как отложенная операция, выполняемая после установки контекста управляемого объекта (путем загрузки пера) - поэтому это происходит после awakeFromNib и windowControllerDidLoadNib :.Это может создать проблему, если вы хотите выполнить операцию с содержимым контроллера объекта любым из этих методов, так как содержимое контроллера равно нулю.Вы можете обойти это, выполнив выборку «вручную» с помощью fetchWithRequest: merge: error :.Вы передаете nil в качестве аргумента запроса на выборку, чтобы использовать запрос по умолчанию, как показано в следующем фрагменте кода.

Я добавил IBOutlet в свой NSArrayController в делегате приложения и подключил его в Интерфейсном Разработчике.Затем я добавил следующее к методу applicationDidFinishLoading: на основе документации в вышеупомянутой ссылке:

-(void)applicationDidFinishLaunching:(NSNotification *) aNotification {

    NSError *error = nil;
    BOOL ok = [myArrayController fetchWithRequest:nil merge:NO error:&error];

    if (ok) {
        [myCustomViewController redrawMyCustomView];
    }
}

Теперь, когда я запускаю приложение, данные заполняют таблицу, и представление автоматически перерисовывается свыбранные данные.

...