2011-07-12 31 views
5

我只是在一個非常簡單的應用程序的開始(不是真的到目標C還)與NSWindow包含一個NSTextField。該appdelegate.h有這樣的:NSTextField將不會setStringValue

NSWindow *window; 
NSTextField *userIDText; 

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

中的appdelegate連接界面生成器的窗口和文本字段,然後在.m文件:

@synthesize userIDText; 

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

(我也嘗試過其他的東西比@「用戶」作爲字符串) 日誌僅顯示(空),文本字段未更改。我究竟做錯了什麼?我現在搜索互聯網大約5小時,這顯然是我想念的非常簡單的事情。

+2

是你的出口?設置一個斷點,以確保userIDText不爲零 –

+0

我之前做過這件事,並且只想寫下「當然,正如我在Interface Builder中將它們連接起來的那樣」,但後來我檢查了它並沒有發現。也許我在第一時間做了一些其他的錯誤,然後在試圖解決它的時候,我又重新設置了插座。 Thx暗示我正確的方向:) – Andreas

回答

2

您的applicationDidFinishLaunching方法在加載窗口之前調用。這就是爲什麼NSLog(@"UserIDTextString: %@", [userIDText stringValue]);打印空,你不能設置文本框的值。嘗試使用awakeFromNib方法。

+2

假設應用程序委託的窗口和實例都接收到這個「-applicationDidFinishLaunching:」消息,它們位於主nib文件中,如果應用程序委託正在接收「-applicationDidFinishLaunching: '消息,這意味着nib文件*必須*已經被加載。換句話說,首先發送'-awakeFromNib',然後是'-applicationWillFinishLaunching:',然後是'-applicationDidFinishLaunching:'。 – NSGod

+0

正如NSGod所說,它不適用於awakeFromNib(我試過)。 – Andreas

1

剛剛發現你的問題,因爲我有同樣的問題。 問題是,如果您在預創建的「MainMenu.xib」中創建了一個帶按鈕和內容的窗口,則不會將所有內容連接到「文件所有者」,而是連接到左側單獨生成的「App Delegate」對象。

我很確定你已經解決了這個問題。 認爲這可能對其他人有同樣問題有幫助。

此致敬禮!