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