делегат = [[UIApplication sharedApplication] делегат];не работает в init: только viewDidLoad - PullRequest
1 голос
/ 05 июля 2011

Я использую делегата для хранения данных для моего приложения. У меня есть tabviewcontroller с навигационным контроллером в качестве первого контроллера представления. Когда я устанавливаю делегата, используя

delegate = [[UIApplication sharedApplication] delegate]; 

делегат является нулевым за пределами метода init.
Тем не менее, он прекрасно работает, когда места в viewDidLoad. Есть идеи, почему это может быть?

UPDATE

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        delegate = [[UIApplication sharedApplication] delegate];
    }
    return self;
}

Ответы [ 3 ]

1 голос
/ 05 июля 2011

Этот контроллер представления находится в вашем файле MainWindow.xib (или как называется основной .xib в вашем проекте)?Если это так, то делегат приложения, вероятно, также создается при загрузке этого файла, и делегат приложения, вероятно, равен нулю на момент создания контроллера представления.Если ваш делегат приложения имеет ссылку на этот контроллер представления, установите его в качестве делегата контроллера представления в -applicationDidFinishLoadin:withOptions: или просто подключите делегат приложения к выходу -delegate контроллера представления в файле .xib.

0 голосов
/ 07 июля 2011

Файл пера вызывал метод initWithCoder, а не init.

0 голосов
/ 05 июля 2011

Вы не должны использовать -init метод. Иногда это не называется. Используйте эти методы для дополнительной инициализации:

- (void)viewDidLoad {
    [super viewDidLoad];
    // do something
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // do something
}
...