У меня есть приложение на основе Mac OS X Document, в котором есть несколько NSViewController, между которыми я переключаюсь, и каждое представление отображает данные из plist-файлов в NSTableViews на основе пользовательских выборов в NSTableView предыдущего NSViewController. У меня проблема в том, что я не могу понять, какую функцию можно вызывать каждый раз, когда загружается NSViewController, для чтения правильных данных из файла для отображения в NSTableView. Для UIViewControllers я использовал семейство функций viewDidLoad, viewWillAppear, но мне не удалось найти соответствующие функции для NSViewController.
В настоящее время я использую awakeFromNib, который работает нормально, но только при первой загрузке NSViewController. Я пробовал loadView, но это сворачивает NSView. Я предполагаю, что мне нужно сделать больше настроек для использования loadView.
Я использую код View Swapping из книги Хиллегаса «Программирование какао для MAC OS X», которая переключает ViewControllers со следующим кодом:
- (void)displayViewController:(ManagingViewController *)vc
curBox: (NSBox *)windowBox
{
// End editing
NSWindow *w = [windowBox window];
BOOL ended = [w makeFirstResponder:w];
if (!ended) {
NSBeep();
return;
}
NSView *v = [vc view];
NSSize currentSize = [[windowBox contentView] frame].size;
NSSize newSize = [v frame].size;
float deltaWidth = newSize.width - currentSize.width;
float deltaHeight = newSize.height - currentSize.height;
NSRect windowFrame = [w frame];
windowFrame.size.height += deltaHeight;
windowFrame.origin.y -= deltaHeight;
windowFrame.size.width += deltaWidth;
[windowBox setContentView:nil];
[w setFrame:windowFrame
display:YES
animate:YES];
[windowBox setContentView:v];
// Put the view controller in the responder chain
[v setNextResponder:vc];
[vc setNextResponder:windowBox];
}
и помещает контроллер NSView в цепочку респондента.
Есть ли какая-нибудь функция, которую я могу вызывать для настройки представления каждый раз, когда меняю NSViewControllers? Могу ли я проверить, что NSViewController стал firstResponder?