2013-07-24 14 views
5

最近Objective-Cの学習を始めましたが、少し問題がありました。私はペンでなくカスタムビューコントローラを使用しようとしているので、ビューはコード内に作成されます。ビューコントローラ自体はAppDelegateで作成されます。ペン先のないカスタムNSViewControllerの作成

プログラムを実行すると、最初にデフォルトの空のウィンドウが表示されます。このウィンドウを閉じると、ビューを正しく含む2番目のウィンドウがポップアップします。私は明らかにその最初のウィンドウが表示されることを望んでいませんが、何が原因であるのかわかりません。私がこのテーマで見つけることができた唯一の情報は、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。 -loadViewの目的は、ビューをロードすることです。これは、View Controllerのviewプロパティにアクセスし、そのプロパティの値がnilであるときに呼び出されます。この場合、イニシャライザの自己SetViewにアクセスしているので、-loadViewが呼び出されます。再度、loadViewを特に呼び出すことになります。これは1回目が空であるか、iOSがアプリケーションを読み込んでいるのを見る理由の1つになる可能性があります。 – Srivathsa

+0

それが原因です。ありがとう! – user2616316

+0

あなたの問題を解決しました。それでは、私のコメントをアップヴォートできます。 – Srivathsa

答えて

14

簡潔に言えば、は、loadViewを上書きし、self.viewを表示します。あなたはそれを設定する前にフレームを与えたいでしょう。

loadViewのデフォルトの実装では、ペン先をロードしようとします。あなたが望んでいなければ、これを無効にするつもりです。

+0

これは機能しません。私はそれにフレームを与えようとするたびに不正なアクセスでクラッシュします。 –

+0

@JackyWang動作します。 'loadView'の中に' NSView'オブジェクトを宣言し、そのオブジェクトのフレームを設定し、新しいビューオブジェクトに 'self.view'を設定する必要があります。言い換えれば、 'self.view'がまだ存在しないので、' loadView'の中に 'self.view.anything'を使用しないでください**。 – Mahouk

関連する問題