2010-01-21 95 views
0

我已经在视图控制器的头文件中声明一个NSString的成员变量中:初始化的NSString成员变量视图控制器


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

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

-(IBAction)buttonPressed: (id)sender; 

实现内部,我用@synthesize var并尝试使用VAR从内buttonPressed方法的实现,但它不能正常工作,我认为这是因为var从未初始化。我可以在哪里初始化这个变量?我不想在这个方法里面做;我想这样做一次,当然,因为我会继续追加文本,使其:


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

[input release]; 
} 

我试图重写视图控制器类中init方法,但它永远不会被调用(也许是因为没有明确的初始化)所以,我应该在哪里初始化var,以便我可以在视图控制器类(buttonPressed方法内)中使用它?

感谢, 米哈伊

回答

1

有几个地方初始化:

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

这是指定的初始化。你说你重载了“init”,它不是UIViewController的指定初始值设定项。

- (void)awakeFromNib 

如果您的视图控制器本身就是一个父NIB内,这种方法被调用一次父NIB满载和父NIB的网点已全部接线。

- (void)viewDidLoad 

如果你的视图控制器有一个NIB,当它的NIB被加载时调用它。

- (void)loadView 

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

+0

谢谢。我用viewDidLoad,它按预期工作。 – 2010-01-21 20:43:24

0

最好的地方是你用你的viewDidLoad或任何init方法内。如果你没有,只需在你的UIViewController中添加一个方法-(void)viewDidLoad

+0

谢谢,它的工作! – 2010-01-21 20:44:40

0

当然这不起作用,stringByAppendingString是一个实例方法,并且var从不分配。如果你有一个nib文件(这个例子似乎有),最好的方法是在viewDidLoad上进行初始化,但是在initialize之前检查是否allready nil,以避免每次调用这个方法时分配一个新的对象。终于记得发布

+0

@ user652716 - 请勿签名;使用你的[个人资料页面](http://stackoverflow.com/users/652716/user652716);请参阅[常见问题](http://stackoverflow.com/faq) – McDowell 2011-05-19 13:38:59