可可 - 为什么我的ViewController无法在相应的nib文件中加载NSWindow对象?

时间:2016-03-27 00:22:10

标签: objective-c macos cocoa

我有一个NSViewController和一个相应的.xib文件。 在nib文件中,有一个NSPanel。 我将NSPanel链接到ViewController:

@property (strong) IBOutlet NSPanel *panel;

但是,当我想将panel传递给我的AppDelegate并在屏幕上显示时,我的代码效果不佳。 这是我的代码的一部分:

//MainViewController.m
-(NSPanel *)passPanel{
    if(!self.panel){
        NSLog(@"panel is nil");
        self.panel = [[NSPanel alloc] init];    //breakpoint
        return self.panel;    
    }else{
        NSLog(@"panel is not nil");
    return self.panel;    //breakpoint
    }
}

//AppDelegate.m
MainViewController* vc = [[MainViewController alloc] init];
self.window = [vc passPanel];

我认为当我发起vc时,该面板应该像nib文件中的那样启动,因为我已将其设置为属性。

但为什么总是nil? 我还设置了断点来调试,我发现它不能正常工作。

为了不让问题变得混乱,我将所有代码粘贴到下面的MainViewController.m中:

#import "MainViewController.h"

@interface MainViewController ()


@end

@implementation MainViewController

@synthesize panel;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do view setup here.
}

-(NSPanel*)passPanel{
    NSLog(@"passing panel to sender...");
    if(!self.panel){
        NSLog(@"panel is nil");
        self.panel = [[NSPanel alloc] init];
        return self.panel;
    }else{
        NSLog(@"panel is not nil");
    return self.panel;
    }
}
@end

修改

由于代码没有明确说明问题,我在下面放了一些截图。

MainMenu.xib

enter image description here

MainViewController.xib

enter image description here

MainMenu.xib是创建项目时创建的默认nib文件。在这个nib文件中,我有window来显示其他视图。在MainViewController.xib中,我有一个NSPanel,它是NSWindow的子类。实际上,我不确定使用ViewController(MainViewController)控制窗口是否合适。现在我想显示这个NSPanel对象。因此,我将此面板分配到window中的MainMenu.xib。它确实有效(虽然我觉得这不是一个好方法)。 我的问题是,我认为在窗口分配了NSPanel后,面板会自动加载其视图。但是,它没有。 在passPanel方法中,结果self.viewnil。所以屏幕上显示的是一个空白窗口。

我希望它显示: enter image description here

但它显示 enter image description here

0 个答案:

没有答案