Могу ли я инициализировать что-то в приложении для iPhone с помощью раскадровки вне viewDidLoad?

У меня есть приложение для iPhone, состоящее из двух контроллеров представления; основной и один с экраном помощи. У каждого есть кнопка, которая выполняет переход от одного к другому.

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

Моей первой мыслью было: «Имейте логическую переменную, которая изначально установлена ​​​​в false, затем проверьте ее viewDidLoad, и если она ложна, выполните инициализацию, а затем установите ее в значение true» — но как мне инициализировать ее значением false в первое место?


person Don Del Grande    schedule 15.02.2013    source источник


Ответы (2)


arrow_upward
1
arrow_downward

в файле класса .m создайте bool для @implementaition:

@implementation yourClass{

    bool initialize = 0;
}

а затем протестируйте его при просмотре:

-(void)viewDidLoad{

    if(initialize == 0){

    //do everything you need to do

    initialize = 1;

    }
}

думаю получится...

person Community    schedule 15.02.2013
comment
Это работает, но теперь у меня другая проблема: у меня есть NSMutableArray кнопок (создается динамически), который подключен к представлению через IBOutletCollection, но когда я перехожу от представления справки обратно к основному представлению, кнопки больше не существует. У меня есть ощущение, что проблема может заключаться в том, что оба перехода являются модальными, и в этом случае возникает вопрос, какого типа они должны быть, чтобы представление справки не вызывало перезапись основного представления? - person Don Del Grande; 16.02.2013
comment
Если представления находятся в NavigationController, переходы должны быть Push. Если нет NavigationController, вы можете использовать Modal. - person ; 16.02.2013
comment
Проблема решена — я избавился от перехода Help->Main, создал новый UIViewController, изменил класс раскадровки справки на класс нового контроллера представления и создал действие для кнопки возврата справки, которое вызывает функцию dismissModalViewControllerAnimated. - person Don Del Grande; 16.02.2013

arrow_upward
2
arrow_downward

Я предполагаю, что вы выполняете переход «Push» (это самый стандартный вид перехода, который можно сделать в приложении iOS), и если вы используете переход «Push», это означает, что у вас есть навигационный контроллер в вашем приложение.

лучшее, что здесь можно сделать, это не помещать еще один "основной" контроллер представления в стек других контроллеров представления (именно поэтому вы видите, что "viewDidLoad" вызывается каждый раз, когда вы нажимаете основное представление), но вместо этого, когда вы нажимаете кнопку "перейти к главному" на экране справки, открывает экран справки и возвращается к предыдущему. Вызов, который будет делать это, - это popViewControllerAnimated.

Это означает, что «viewDidLoad» на этом контроллере представления вызывается только один раз, так как основное представление загружается один раз.

person Michael Dautermann    schedule 15.02.2013