我在视图控制器的头文件中声明了一个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方法内)?
谢谢, 米哈伊
答案 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,以避免每次调用这个方法时都会分配一个新对象。终于记得发布了