編集: 誰かが実際のコードを見たい場合は、ここにあります: 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 内にこのコードを配置することはできません。