0

編集: 誰かが実際のコードを見たい場合は、ここにあります: http://pastie.org/713951

簡単に言うと、私が抱えている問題は、 fly() 関数でウィンドウを表示できないことです。

完全な説明:

Mac アプリケーション「Coda」のプラグインを作成しています。私は2つのアウトレットを持つコントローラー「Bolder」を持っています:

@class Bolder;

@interface Bolder : NSObject
{
    IBOutlet id MyLabel;
    IBOutlet id theWindow;
}

Coda は、プラグインに対して独自の init メソッドを指定します。この init メソッドでは、Nib 'Superman' をロードし、プラグインがクリックされたときに呼び出すメソッド 'fly' を選択しています。

[NSBundle loadNibNamed:@"Superman" owner:self];
[controller registerActionWithTitle:NSLocalizedString(@"OK!", @"Flying Man") target:self selector:@selector(fly:)];

「fly」メソッドでは、ウィンドウを表示してラベルのテキストを変更したい:

- (void)fly:(id)sender
{
    [theWindow orderFront:self];
    [theWindow makeKeyAndOrderFront:self];
    [MyLabel setStringValue:@"new text"];
}

この最後の部分が私を悩ませている部分です。ウィンドウが表示されないだけです! しかし、これらの同じ 3 行を 'awakeFromNib' 内に配置すると、正常に表示されます。この違いの原因は何ですか?Coda を起動するたびにプラグインのウィンドウが表示されるため、awakeFromNib 内にこのコードを配置することはできません。

4

2 に答える 2

0

ウィンドウを表示する時間になるまで、ペン先の読み込みを遅らせてみてください。例えば:

- (void)fly:(id)sender
{
    if (!theWindow) 
    {
        [NSBundle loadNibNamed:@"Superman" owner:self];
    }
    else
    {
        [theWindow makeKeyAndOrderFront:self];
    }
}
于 2009-11-25T02:28:24.700 に答える
0

ペン先をロードしたときにウィンドウを表示したくない場合は、Interface Builder のウィンドウの「Visible At Launch」のチェックを外します。

于 2009-11-23T01:12:26.527 に答える