2012-01-06 2 views
0

У меня есть NSInteger в моем делете приложения под названием healthInt. В делегате приложения у меня установлено значение HealthInt равным 100. И когда приложение загружает первое представление, значение healthInt по-прежнему равно 100. Но когда он загружает следующее представление, для параметра HealthInt установлено значение 0. Даже если метка в этом контроллере представления (под названием healthLabel) показывает 100. причиной этого является проблема в том, что то, что я хочу сделать, этоИзменение значения NSInteger при загрузке вида

-(void)viewDidLoad{ 
    if(appDelegate.healthInt <= 0){ 
    healthLabel.text = @"Dead"; 
    } 
} 

Но это не похоже на работу. И я знаю, что это плохая архитектура, но мне слишком поздно переделывать весь проект. Если вам нужно увидеть другой код, я с удовольствием покажу его вам :)

+1

Держу пари, что 'appDelegate' - это нуль. Возможно, потому, что вы находитесь в другом экземпляре своего контроллера представлений от того, где вы первоначально установили 'appDelegate'. –

+0

Но healthInt составляет 100 в каждом другом контроллере, кроме этого конкретного. –

+0

Прочтите, что я сказал еще раз. Вы даже не получаете доступ к 'healthInt', потому что' appDelegate' равен нулю. Он не настроен - вы его где-то установили, и вы не установили его в этом контроллере. –

ответ

1

Я согласен с комментарием. Убедитесь, что свойство appDelegate не равно null. Если это возможно, вы можете использовать

id<UIApplicationDelegate> appDelegate = [UIApplication sharedApplication].delegate 

, чтобы получить его снова.

[Изменить] Вам нужно будет приложить appDelegate к типу вашего класса, чтобы получить «healthInt» от делегата.

MyAppDelegate *myApp = (MyAppDelegate *)[UIApplication sharedApplication].delegate 

[второй Edit] ДУХ! Я не видел, чтобы ваш примерный код находился в вашем представленииDidLoad. Горячие лизы правы. Вы должны установить делегат в контроллере представления, прежде чем вы сможете его вызвать.

Попробуйте это:

-(void)viewDidLoad{ 

appDelegate = [[UIApplication sharedApplication] delegate]; 
    if(appDelegate.healthInt <= 0){ 
    healthLabel.text = @"Dead"; 
    } 
    } 

Надеется, что это помогает.

Rob

+0

У меня этот appDelegate = [[UIApplication sharedApplication] delegate]; В моем методе viewDidLoad это будет трюк? И этот бит кода, где это должно быть? –

+0

Да, это должно работать нормально. Затем я разместил бы точку останова на вашем коде выше и проверил бы, что appDelegate не ноль. Если это не так, я бы искал код, который устанавливает значение HealthInt для некоторого числа. Возможно, у вас есть код, который случайно устанавливает его на ноль. – Rob

+0

Но где я должен положить этот id appDelegate = [UIApplication sharedApplication] .delegate, должен ли я помещать его в appDelegate где-нибудь? –