Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在视图控制器内初始化NSString成员变量_Iphone - Fatal编程技术网

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

Iphone 在视图控制器内初始化NSString成员变量,iphone,Iphone,我在视图控制器的头文件中声明了NSString成员变量: @interface MyApprViewController : UIViewController { NSString *var; ... } @property (retain) NSString *var; ... -(IBAction)buttonPressed: (id)sender; 在实现中,我使用了@synthesis var,并尝试在buttonPressed方法的实现中使用该var,但它不

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


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

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

-(IBAction)buttonPressed: (id)sender;
在实现中,我使用了
@synthesis 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方法内)

谢谢,
Mihai

最好的位置是在您的
viewDidLoad
或您使用的任何
init
方法中。如果两者都没有,只需向UIViewController添加一个方法
-(void)viewDidLoad

有几个地方需要初始化:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
- (void)awakeFromNib
这是指定的初始值设定项。您说过您重载了“init”,它不是UIViewController的指定初始值设定项

- (void)awakeFromNib
如果视图控制器本身位于父NIB内部,则在父NIB完全加载且父NIB的出口全部连接完毕后,将调用此方法

- (void)viewDidLoad
如果您的视图控制器有一个NIB,则在加载其NIB时调用它

- (void)loadView

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

当然,这不会起作用,stringByAppendingString是一种实例方法,并且永远不会分配var。如果您有一个nib文件(如本例appera所示),那么最好的初始化方法是在viewDidLoad上,但在初始化之前检查是否为allready nil,以避免每次调用此方法时都分配一个新对象。最后记住发布

谢谢。我使用了viewDidLoad,它按预期工作。@user652716-请不要签名;利用你的时间;看见