2011-04-29 55 views
0
#import <Foundation/Foundation.h> 

@interface MyClass : NSObject { 
@private 
    IBOutlet NSTextField *tf; 
} 
- (void)setStr; 

@end 

=========================================== 

#import "MyClass.h" 

@implementation MyClass 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     // Initialization code here. 
    } 

    return self; 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
} 

- (void)setStr 
{ 
    [tf setStringValue:@"aaaaaaaaa"]; 
} 

@end 

调用一个方法从我AppDelegate类无法从我的课获得形式的访问

- (IBAction)test1:(id)sender 
{ 
    MyClass *m = [[MyClass alloc] init]; 
    [m setStr]; 
} 

我的.xib文件中创建的MyClass的对象。我将textfield的出口与表单上的文本字段相关联。 按下按钮时没有动作。 我错了?

+0

当你说XIB文件,我相信你的意思是一个看法。 – user210504 2011-04-29 12:10:01

+0

你为同一个类创建第二个对象。一个是来自appdelegate,另一个是在类和你问textfeild文本,那么你不得不提到,如果它是cocoatouch UITextfeild .. – ajay 2011-04-29 12:22:26

+0

@ user210504,我不认为这就是他的意思。我认为他在他的XIB文件中有一个MyClass的实例,因此在运行时在他的NIB中。 – Dov 2011-04-29 12:30:52

回答

0

您需要在AppDelegate中为MyClass创建一个插座并将其连接起来,然后在test1中使用该插座而不是创建新实例。这guide from Apple应该可以帮到你。

另一种可能性是将test1动作放入MyClass,并通过按钮按钮直接调用它,或使setStr为IBAction。这些都是可能的,因为在XIB中有一个MyClass实例。

+0

“您需要为AppDelegate中的MyClass创建一个插座并将其连接起来,然后在test1中使用该插座而不是创建新实例。” ..请告诉我如何做到这一点? – Novikoff 2011-04-29 12:41:49

+0

与创建'IBOutlet NSTextField * tf;'相同的方法。坐在你的XIB中的MyClass实例和坐在窗口内的对象是一样的。我用一个可能帮助你的链接更新了我的答案。 – Dov 2011-04-29 12:43:57