self.appDelegate = [[UIApplication sharedApplication] делегат]; ВСЕГДА 0x0 - PullRequest
1 голос
/ 20 августа 2009

Я испытываю странное поведение. В контроллере представления я хотел бы сохранить ссылку на моего делегата приложения ([[UIApplication sharedApplication] delegate])

Итак, у меня есть свойство, которое я устанавливаю при создании экземпляра моего контроллера. Все работает на симуляторе на устройстве, мое свойство всегда 0x0 в отладчике.

Я написал этот код для проверки:


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {       
        AppDelegate *localVar = [[UIApplication sharedApplication] delegate]; // OK
        self.appDelegate = [[UIApplication sharedApplication] delegate]; // 0x0
    }
    return self;
}

Я уверен, что appDelegate установлен, я также пишу установщик, чтобы убедиться, что он называется


- (void)setAppDelegate:(AppDelegate *)delegate
{
    appDelegate =  delegate; // delegate is a valid address but appDelegate is still showing 0x0
}

Мне интересно, хорошо ли написан мой класс AppDelegate.

У вас есть идея?

Я потерян ...

Спасибо

Ответы [ 2 ]

2 голосов
/ 24 сентября 2011

Вот некоторые вещи, которые вы можете попробовать -

  1. Как вы объявили свой self.appDelegate? Это объект AppDelegate?
  2. Установите точку останова в - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil и посмотрите, что такое self. Это экземпляр AppDelegate?
  3. Также всякий раз, когда я хочу получить экземпляр AppDelegate, я делаю это - AppDelegate *localVar = (AppDelegate *)[[UIApplication sharedApplication] delegate]; (обратите внимание на приведение типа AppDelegate*)
  4. Я очень сомневаюсь, что то, на что указывает николия, возможно, так как UIApplication делегат - это первое, что создается, только когда вызывается ваш viewController.

Надеюсь, это поможет ...

1 голос
/ 24 ноября 2009

В то время, когда ваш контроллер представления загружен, делегат, вероятно, еще не создан или не установлен в объекте UIApplication. Все это делается при загрузке пера, но порядок произвольный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...