我是iOS5和故事板新手。iOS5:與loadview和init和實例變量混淆
我注意到,如果我在我的viewcontroller .h文件中聲明一個實例變量,並在我的viewcontroller的.m文件的init中設置值,當viewcontroller的視圖顯示時,我的實例變量在viewDidLoad 。爲了讓我獲得myvariables,我需要在viewDidLoad中執行[self init]。我的問題是:
@interface tableViewController : UITableViewController
{
NSMutableArray *myvariable;
}
@end
@implementation tableViewController
-(id)init
{
myvariable = [[NSMutableArray alloc]initWithObjects:@"Hi2",@"Yo2",@"whatsup2", nil];
}
- (void)viewDidLoad
{
NSLog(@"%@",myvariable); // DISPLAYS NULL
[super viewDidLoad];
}
- 爲什麼不是我的變量可以在viewDidLoad中,當我宣佈,在我的.h和.m文件執行?
- 如果是這樣的話,viewDidLoad或viewWillAppear是加載視圖控制器數據的公共位置嗎?
- 它看起來像即使你實例化一個viewcontroller並調用init函數,viewDidLoad也不一定要顯示變量。
- 哪裏是我的視圖控制器加載模型(數據)的正確位置/方法?
在此先感謝
HI Firoze, 感謝您的回答。 initWithCoder絕對是正確的函數調用, 所有的viewcontroller總是調用initWithCoder。將我的變量實例化放在initWithCoder,initWithNibName和init中有什麼區別?這是否意味着當我做SomeViewController *測試= [[SomeViewController分配]初始化],initWithCoder也被稱爲? – sonoluminescence
'awakeFromNib'是這樣的IMO初始化的更好的地方。要回答這個問題 - 如果你從nib文件創建一個對象 - 使用awakeFromNib,如果你在代碼中創建一個對象 - 使用init。 – Abizern
恩,不,@sunwukong,我不是建議你自己調用initWithCoder。當它取消存檔故事板中的任何視圖控制器時,該框架將調用該方法。因此,如果您想要在故事板中初始化視圖控制器,則需要覆蓋initWithCoder:和/或awakeFromNib。 –