Обновить метку в другом контроллере представления из appDelegate

Я хотел бы обновить метку в одном из моих ViewController из appDelegate. Метка в контроллере представления связана с IB и имеет заданные свойства.

В AppDelegate.h

Я создаю ivar для контроллера представления, чтобы я мог получить доступ к метке на контроллере представления из такого делегата.

someViewController *myView;

и в файле AppDelegate.m

myView.theLabel.text = @"Whatever";

Я также пробовал myView.theLabel setText: @"whatever";

Я также пытался сделать myView свойством и синтезировать его. Я пробовал код в applicationDidFinishLaunching и applicationWillEnterForeground, однако метка никогда не обновляется. Как лучше всего это сделать?


person Alex McPherson    schedule 22.06.2012    source источник
comment
Вы создаете экземпляр контроллера в своем делегате приложения или каким-либо другим способом получаете ссылку на экземпляр этого контроллера?   -  person Alladinian    schedule 22.06.2012
comment
@Alladinian в .h, как уже упоминалось, я создаю ivar someViewController *myView и таким образом получаю доступ к метке. Заголовок someViewController.h добавляется в appDelegate.h и appDelegate.m, но не уверен, что вы имеете в виду. Спасибо за ответ.   -  person Alex McPherson    schedule 25.06.2012
comment
@Alladinian, извините, я толстый, нет, я не создаю экземпляр контроллера представления из appdelegate, должен ли я делать это над меткой. Я получаю доступ к someViewController *myView = [[someViewController alloc] initWithNibName: @someViewController бла-бла?   -  person Alex McPherson    schedule 25.06.2012
comment
Чтобы установить метку в вашем контроллере, вам нужно получить ссылку на нее после ее выделения/инициализации/представления. Где и как ваш контроллер представления добавляется в окно?   -  person Alladinian    schedule 25.06.2012


Ответы (1)


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

Попробуйте это, чтобы проверить эту теорию:

someViewController *myView;
if(myView)
    NSLog(@"Object has been created");
else
    NSLog(@"You have a null reference - The Object hasn't been created yet");

Если это так, измените строку на эту, чтобы создать ее:

someViewController *myView = [[someViewController alloc] initWithNibName:@"SomeViewController" bundle:nil];
myView.theLabel.text = @"Something";
self.window.rootViewController = myView;

Да, вы создаете свое первое представление в appDelegate, а затем устанавливаете rootViewController для этого первого представления.

person Highrule    schedule 29.06.2012