2014-09-06 65 views
-1

Hi和tnxs阅读。 测试是声明,呼吁在我的视图控制器viewDidLoad中作为的NSString:如何通过IBAction传递对象?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSString *test = [[NSString alloc]init]; 
    test = @"This is a Test"; 
} 

但是,如果尝试在IBAction为使用测试,没有什么是过去了,我得到的测试字符串的NULL来代替。

- (IBAction)changeLabel:(id)sender { 
    NSString *message = [NSString stringWithFormat:@"Hello, %@", test]; 
    [self.simpleLabel setText:message]; 
    [self.simpleTextField resignFirstResponder]; 

很明显,有一些基本的我很想念,但不幸的是我无法在其他帖子中找到它。 提前Tnxs。

+0

是'test'也伊娃或财产?如果是这样,请从'viewDidLoad'中删除'NSString * test = [[NSString alloc] init];'行。这是创建一个名为'test'的局部变量,它隐藏了名为'test'的伊娃。 – rmaddy 2014-09-06 20:52:27

+0

Tnxs,这回答了我的问题!但是,由于这个简单的例子起源于一个更复杂的例子,而不是一个字符串,我使用一个字符串名称作为其属性之一的自定义类,如果我没有alloc/init它在viewDidLoad我不能使用它;并通过这样做,它在IBAction中是不可见的,虽然它被添加到头文件中... – LukasGF 2014-09-07 08:45:48

回答

2

您可以在您的.h文件中添加一个类似NSString *test的成员变量,并且test可以在您完成后通过类中的任何方法访问。

例子:

@interface MyClass : UIViewController { 
    NSString *test; 
} 

@end 

并访问:

-(void)viewDidLoad { 
    test = @"test"; 
} 
1

夫妇的事情。

  1. 你不需要说alloc/initNSString,你可以简单地说someString = @"myString";

  2. 你应该创建一个属性,你可以守住你的字符串以备将来使用,因此,例如

@property (strong, nonatomic) NSString *someString;

然后viewDidLoad

self.someString = @"Hello World";

最后,在IBAction你可以说:

- (IBAction)changeLabel:(id)sender { 
    NSString *message = [NSString stringWithFormat:@"Hello, %@", self.someString]; 
    [self.simpleLabel setText:message]; 
    [self.simpleTextField resignFirstResponder]; 
}