我正在使用委托来存储我的应用的数据。我有一个带有navigationviewcontroller的tabviewcontroller作为第一个视图控制器。当我使用
设置代理时delegate = [[UIApplication sharedApplication] delegate];
委托在init方法之外为null 但是当它在viewDidLoad中时,它可以正常工作。任何想法为什么会这样?
更新
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
delegate = [[UIApplication sharedApplication] delegate];
}
return self;
}
答案 0 :(得分:1)
您的MainWindow.xib文件中是否有此视图控制器(或者调用项目中的主要.xib)?如果是这样,可能还会在加载该文件时创建应用程序委托,并且在创建视图控制器时,应用程序委托可能为零。如果您的应用程序委托具有对此视图控制器的引用,请将其自身设置为-applicationDidFinishLoadin:withOptions:
中的视图控制器委托,或者仅将应用程序委托连接到.xib文件中视图控制器的-delegate出口。
答案 1 :(得分:0)
您不应使用-init
方法。有时它没有被召唤。使用theese方法进行额外的初始化:
- (void)viewDidLoad {
[super viewDidLoad];
// do something
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// do something
}
答案 2 :(得分:0)
nib文件正在调用initWithCoder方法,而不是init。