当NSViewController重新加载时,使用文件中的新数据重绘NSTableView?

问题描述:

我有一个Mac OS X基于文档的应用程序,它具有多个可在其中切换的NSViewController,每个视图都基于前一个NSViewController的NSTableView中的用户选择显示来自NSTableViews中plist文件的数据。我遇到的问题是我无法弄清楚什么函数可以调用,每当NSViewController加载时,从文件中读取正确的数据以显示在NSTableView中。对于UIViewControllers,我使用了viewDidLoad函数族,viewWillAppear,但是我一直无法找到NSViewController的相应函数。当NSViewController重新加载时,使用文件中的新数据重绘NSTableView?

目前我使用awakeFromNib,它工作正常,但只有在第一次加载NSViewController。我试过loadView,但是崩溃了NSView。我认为我需要做更多的设置才能使用loadView。

我使用的是从Hillegass的书可可规划为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是否已成为第一个响应者?

这个post提供了答案。

我添加以下代码:

- (void)viewWillLoad { 

} 

- (void)viewDidLoad { 

} 

- (void)loadView { 
[self viewWillLoad]; 
[super loadView]; 
[self viewDidLoad]; 
} 

,并在displayViewController年初我加入

[vc loadView]