重新加载NSViewController时是否使用文件中的新数据重新绘制NSTableView?

重新加载NSViewController时是否使用文件中的新数据重新绘制NSTableView?,nstableview,nsviewcontroller,loadview,Nstableview,Nsviewcontroller,Loadview,我有一个基于Mac OS X文档的应用程序,它有多个NSViewController,我可以在这些NSViewController之间切换,每个视图都会根据用户在以前的NSViewController的NSTableView中的选择在NSTableView中显示plist文件中的数据。我遇到的问题是,我不知道每次加载NSViewController时可以调用什么函数来从文件中读取要在NSTableView中显示的正确数据。对于UIViewControllers,我使用了viewDidLoad的函

我有一个基于Mac OS X文档的应用程序,它有多个NSViewController,我可以在这些NSViewController之间切换,每个视图都会根据用户在以前的NSViewController的NSTableView中的选择在NSTableView中显示plist文件中的数据。我遇到的问题是,我不知道每次加载NSViewController时可以调用什么函数来从文件中读取要在NSTableView中显示的正确数据。对于UIViewControllers,我使用了viewDidLoad的函数族,ViewWillDisplay,但是我还没有找到NSViewController的相应函数

目前我正在使用awakeFromNib,它工作得很好,但只是在第一次加载NSViewController时。我尝试过loadView,但这会使NSView崩溃。我假设我需要进行更多的设置才能使用loadView

我正在使用Hillegass的《MAC OS X Cocoa编程》一书中的视图交换代码,该书使用以下代码切换ViewController:

  - (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];
 }
- (void)viewWillLoad {

}

- (void)viewDidLoad {

}

- (void)loadView {
[self viewWillLoad];
[super loadView];
[self viewDidLoad];
}
并将NSView控制器放入响应器链中

是否有一些函数可以在每次交换NSViewController时调用以设置视图?我可以检查NSViewController是否已成为第一响应者吗?

这提供了答案

我添加了以下代码:

  - (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];
 }
- (void)viewWillLoad {

}

- (void)viewDidLoad {

}

- (void)loadView {
[self viewWillLoad];
[super loadView];
[self viewDidLoad];
}
在displayViewController的开头,我添加了

[vc loadView]