2013-07-24 130 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

相關問題