2011-07-12 12 views
5

NSTextFieldを含むNSWindowを使用して、かなり単純なアプリケーション(まだ目的のCではなく)の初めです。 appdelegateはウィンドウとテキストフィールドにして、.mファイルにInterface Builderで接続されている NSTextFieldはsetStringValueを設定しません

NSWindow *window; 
NSTextField *userIDText; 

@property (nonatomic, retain) IBOutlet NSWindow *window; 
@property (nonatomic, retain) IBOutlet NSButton *nextButton; 
@property (nonatomic, retain) IBOutlet NSTextField *userIDText; 

@synthesize userIDText; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    [userIDText setStringValue:@"user"]; 
    NSLog(@"UserIDTextString: %@", [userIDText stringValue]); 

(私も試した他のものよりもappdelegate.hは、この持ち@ "user" to string) ログには(null)のみが表示され、テキストフィールドは変更されません。私は間違って何をしていますか?私は約5時間インターネットを検索します。それは明らかに本当に本当にシンプルなものです。

+2

はあなたのアウトレットセットですか?ブレークポイントを設定して、userIDTextがnilでないことを確認してください –

+0

これを前に行い、「Interface Builderで接続したと言っているように」と書いたかったのですが、チェックしただけではありませんでした。たぶん私は最初に何か間違ったことをした後、それを修正しようとしている間に私はコンセントを再度設定しませんでした。 正しい方向に私をヒントしてくれたThx :) – Andreas

答えて

2

applicationDidFinishLaunchingメソッドは、ウィンドウがロードされる前に呼び出されます。その理由はNSLog(@"UserIDTextString: %@", [userIDText stringValue]);がnullを表示し、テキストフィールドの値を設定できないということです。 awakeFromNibメソッドを使用してみてください。

+2

アプリケーションデリゲートが '-applicationDidFinishLaunching:を受け取っている場合、この' -applicationDidFinishLaunching: 'メッセージを受け取っているアプリケーションデリゲートのウィンドウとインスタンスの両方がメインのnibファイルにあると仮定すると、 'メッセージは、nibファイル*が既にロードされていなければならないことを意味します。言い換えれば、 '-awakeFromNib'が最初に送られ、次に' -applicationWillFinishLaunching: '、' -applicationDidFinishLaunching: 'が送られます。 – NSGod

+0

NSGodが言うように、awakeFromNibでは動作しません(試しました)。 – Andreas

1

私は同じ問題を抱えていたので、あなたの質問を見つけました。 前処理済みの "MainMenu.xib"にボタンやものを含むウィンドウを作成すると、すべてを "ファイルの所有者"に接続するのではなく、左側に別途生成された "App Delegate"オブジェクトに接続するという問題がありました。

私はあなたが既に問題を修正していることを確信しています。 同じ問題を抱えている他の人にとっては役に立つかもしれないと考えました。

よろしくお願いいたします。

関連する問題