2013-07-24 77 views
5

我最近开始学习Objective-C,遇到了一个小问题。我试图使用没有笔尖的自定义视图控制器,因此视图是在代码中创建的。视图控制器本身是在AppDelegate中创建的。在没有笔尖的情况下创建自定义NSViewController

当我运行该程序时,它首先显示一个默认的空窗口。关闭此窗口后,会弹出另一个窗口,其中包含视图。我显然不希望第一个窗口出现,但我不知道是什么原因造成的。我能找到的关于这个主题的唯一信息是针对iOS开发的,这不完全相同。

我也得到这个消息,而我真的不知道这意味着什么:无法连接动作orderFrontStandardAboutPanel:目标类MainViewController的

的AppDelegate:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    mainViewController = [[MainViewController alloc] initWithFrame:_window.frame]; 
    _window.contentView = mainViewController.view; 
} 

MainViewController:

- (id)initWithFrame:(NSRect)frame 
{ 
    self = [super initWithNibName:nil bundle:nil]; 
    if (self) 
    { 
     [self setView:[[MainView alloc] initWithFrame:frame]]; 
     [self loadView]; 
    } 
    return self; 
} 
+1

我想你是调用loadview 2次。 2.显式加载视图。 -loadView的目的是,加载视图。当您访问视图控制器的视图属性并且该属性的值为零时调用它。在这种情况下,你在初始化器中访问自我SetView,所以这就是-loadView被调用的时候。你再次调用loadView。这可能是您第一次看到空的原因之一,或者iOS正在加载您的应用程序时显示加载图像。 – Srivathsa

+0

这就是它造成的,谢谢! – user2616316

+0

好了,它解决了你的问题..然后,你可以upvote我的评论。 – Srivathsa

回答

14

总之,覆盖loadView并将self.view设置为您的视图。在设置之前,你会想给它一个框架。

loadView的缺省实现是它试图加载nib的地方。如果你不想要,你打算重写这个。

+0

这不起作用。它每当我尝试给它一个框架崩溃在不良访问 –

+0

@JackyWang它确实工作。你需要在loadView中声明一个'NSView'对象,然后设置该对象的框架,然后将'self.view'设置为你的新视图对象。换句话说,**从不**在'loadView'内部使用'self.view.anything',因为'self.view'还不存在。 – Mahouk

相关问题