У меня есть TabBar Controller с некоторым элементом панели вкладок.
В первый раз, когда пользователь нажимает на элемент панели вкладок, я хочу, чтобы открылся просмотр предупреждений, чтобы пользователь мог прочитать несколько небольших инструкций.
У меня есть глобальная переменная (скажем, CONFIG), которая содержит некоторое логическое значение (CONFIG.tip1AlreadySeen, CONFIG.tip1AllreadySeen и т. Д.). Все эти логические значения инициализируются как NO.
Когда пользователь касается элемента панели вкладок, в его viewcontroller выполняется метод viewWillAppear. В этом методе я поместил код, подобный следующему:
-(void) viewVillAppear: (BOOL) animated {
extern CONFIG; // <- it's not the actual code but it indicates that a global variable must be used
[super viewWillAppear: animated];
if(CONFIG.tip1AlreadySeen == NO) {
CONFIG.tip1AlreadySeen = YES;
// code for showing the alertview
}
}
Странно то, что этот кусок кода отлично работает в одном контроллере, но не работает в другом.
С некоторой отладкой я обнаружил, что в другом viewcontroller код выполняется, но назначение CONFIG.tipAlreadySeen = YES не изменяет фактическое значение CONFIG.tipAlreadySeen. Это значение по-прежнему НЕТ. Невероятно !!!
Небольшой обходной путь - использование метода viewDidAppear для изменения значения:
-(void) viewVillAppear: (BOOL) animated {
extern CONFIG; // <- it's not the actual code but it indicates that a global variable must be used
[super viewWillAppear: animated];
if(CONFIG.tip1AlreadySeen == NO) {
// code for showing the alertview
}
}
-(void) viewDidAppear: (BOOL) animated {
extern CONFIG;
CONFIG.tip1AlreadySeen = YES;
}
... Но я правда не понял, что случилось !!! Кто-нибудь из вас может объяснить это поведение?
Заранее спасибо!
Marco