2010-01-21 96 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