delegate = [[UIApplication sharedApplication] delegate];在init中不起作用:只有viewDidLoad

时间:2011-07-05 15:55:56

标签: iphone objective-c delegates init

我正在使用委托来存储我的应用的数据。我有一个带有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;
}

3 个答案:

答案 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。