5

Xcodeテンプレートを使用して新しい空白の標準アプリケーションを作成しました。MainMenu.xibのウィンドウを削除し、xibを使用して新しいカスタマイズされたNSWindowControllerサブクラスを作成しました。

それらは「WYSunFlowerWindowController.h」および「WYSunFlowerWindowController.m」と名付けられました。

そして、以下のようなinit関数を追加します。

- (id)init
{
    NSLog(@"init()");

    return [super initWithWindowNibName:@"WYSunFlowerWindowController" owner:self];
}

そして、私のWYAppDelegate.mファイルは次のようになります。

static WYSunFlowerMainWindowController* windowController = nil;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    if (windowController == nil) {
        windowController = [[WYSunFlowerMainWindowController alloc] init];
    }
    [[windowController window] makeKeyAndOrderFront:windowController];
}

また、アプリを起動した後、ウィンドウにウィンドウが表示されないという問題があります。誰でも理由を教えてくれますか?私のコードに何か問題がありますか?

私はObjective-Cとココアの初心者です。ですから、自分では理解できないというばかげた間違いを犯しているのではないかと思います。

アップデート:

これが私のプロジェクトソースです。嘆願は一見して、私の間違いが何であるかを理解するのを助けてくれます。</ p>

https://dl.dropbox.com/u/3193707/SunFlower.zip

4

1 に答える 1

2

あなたのinitメソッドでは、自分自身を返す前に、まず自分自身をスーパーinitに設定する必要があると思います。

-(id)init
{
    NSLog (@"init()");
    self = [super initWithWindowNibName:@"WYSunFlowerWindowController" owners:self];
    return self;
}

編集

に置き換えmakeKeyAndOrderFront:てみてください[windowController showWindow:self]

それでも機能しない場合は、ウィンドウコントローラーxibをチェックし、ファイル所有者がWYSunFlowerWindowControllerに設定されていること、およびIBOutletウィンドウ(NSWindowControllerで宣言されている)がウィンドウに接続されていることを確認します。

編集2:

コントローラの@propertyウィンドウと@synthesizeウィンドウをコメントアウトするのがコツでした。スーパークラスですでに事前定義されているgetとsetterを再宣言しないでください。

于 2012-09-19T07:41:16.580 に答える