2011-05-14 84 views
3

我試圖設置一個NSTextField的值,但它不能正常工作。設置NSTextField的值

我有一個鏈接到一個IBAction一個按鈕,當我把它用self設置,它工作正常:

#import <Foundation/Foundation.h> 


@interface TestMessage : NSObject { 
    IBOutlet NSTextField *text; 
} 

- (IBAction) setMessage: (id) controller; 
- (void) Message:(NSString *) myMessage;  
@end 

#import "TestMessage.h" 

@implementation TestMessage 

- (IBAction) setMessage: (id) controller { 
    // This works 
    [self Message:@"Hello"]; 

    // but this doesn't 
    TestMessage * messageTest= [TestMessage new]; 
    [messageTest Message:@"Hi"]; 

} 
- (void) Message: (NSString *) myMessage { 
    [text setStringValue: myMessage]; 
    NSLog(@"Message Was Called"); 
    // This returns <NSTextField: 0x1001355b0> when called 
    // using self, but null when called the other way. 
    NSLog(@"%@", text); 
} 

@end 

我搜索了一會兒,但還是可以」找到答案。

我想它與委託有關,但我不確定。

在此先感謝。

+0

你是如何在init和didLoad方法中設置函數的?我們可以看到.h文件嗎? – Luke 2011-05-15 18:32:34

回答

1

anotherFuntion撥打該電話時確定要撥打電話嗎?如果anotherFuntion是另一類的方法,則調用[self message:]將無法​​按預期工作...

+0

是的。我使用NSLog確保它被調用,它是,但只是不改變文本字段的值。如果它進入IBAction - >消息,它可以工作,但不是IBAction - > anotherFunction - >消息。 – Miniroo 2011-05-15 01:59:02

+0

你可以發佈你的XCode項目嗎? – alfred 2011-05-15 11:06:35

+0

我只是試圖做一個測試應用程序來顯示你,但它工作正常。這可能是其他原因造成的。如果我找到任何東西,我會回覆。 – Miniroo 2011-05-15 14:40:27

0

我知道這是一箇舊帖子,但我今天一直在擺弄同樣的問題。 你必須在文本框返回的字符串值:

[textField stringValue]; 
0

代碼

TestMessage * messageTest = [TestMessage new]; 

是不尋常的,特別是new。我會認爲new僅僅是一個類的方法不正常alloc/init相當於

TestMessage * messageTest = [[TestMessage alloc] init]; 

的主要問題是,只有當階級TestMessage裝有一個NIB文件IBOutlet NSTextField *text將被初始化。它必須被命名爲類在Interface Builder的對象,像這樣

Set to load this class in IB

,你將不得不實施initWithCoderencodeWithCoder像這樣爲了從IB編碼提取您的字段值:

- (instancetype)initWithCoder:(NSCoder *)coder { 
    self = [super initWithCoder:coder]; 
    if (self) { 
     self.text = [coder decodeObjectForKey:@"text"]; 
    } 
    return self; 
} 


-(void)encodeWithCoder:(NSCoder *)coder 
{ 
    [super encodeWithCoder:coder]; 
    [coder encodeObject:self.text forKey:@"text"]; 
} 

從根本上說,IBOutlet領域沒有得到任何你創建一個類的實例接線。如果他們這樣做了,你會如何表達該字段A應連接到UI對象A,而字段B應連接到UI對象B?連接僅在從Nib文件加載類的環境中建立。