在视图控制器中初始化NSString成员变量

时间:2010-01-21 20:17:00

标签: iphone

我在视图控制器的头文件中声明了一个NSString成员变量:


@interface MyApprViewController : UIViewController {
 NSString *var;
        ... 
}

@property (retain) NSString *var;
...

-(IBAction)buttonPressed: (id)sender;

在实现中,我使用@synthesize var并尝试在buttonPressed方法的实现中使用该var,但它无法正常工作,我认为这是因为var从未初始化。我在哪里可以初始化这个变量?我不想在方法中做到这一点;我当然想做一次,因为我会继续附加文字:


-(IBAction)buttonPressed: (id)sender {
 NSString *input = ((UIButton *)sender).currentTitle;
 var = [var stringByAppendingString:input];
 textField.text = var;  
 }

 [input release];
}

我尝试覆盖视图控制器类中的init方法,但它永远不会被调用(可能是因为没有显式初始化视图控制器类?)所以,我应该在哪里初始化var以便我可以在视图控制器类中使用它(在buttonPressed方法内)?

谢谢, 米哈伊

3 个答案:

答案 0 :(得分:1)

有几个地方可以初始化:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

这是指定的初始化程序。你说你重载了“init”,它不是UIViewController的指定初始化器。

- (void)awakeFromNib

如果您的视图控制器本身位于父NIB内,则在父NIB完全加载且父NIB的插座全部已连接后,将调用此方法。

- (void)viewDidLoad

如果您的视图控制器有NIB,则在加载NIB时调用它。

- (void)loadView

如果您的视图控制器没有NIB,则在首次请求视图时调用它。

答案 1 :(得分:0)

最佳位置将在您使用的viewDidLoad或任何init方法中。如果您没有,只需将方法-(void)viewDidLoad添加到您的UIViewController。

答案 2 :(得分:0)

当然这不起作用,stringByAppendingString是一个实例方法,永远不会分配var。初始化的最佳方法是,如果你有一个nib文件(这个例子看起来有),那就是在viewDidLoad上,但是在initialize之前检查if allready为nil,以避免每次调用这个方法时都会分配一个新对象。终于记得发布了