Странное поведение в viewWillAppear - PullRequest
0 голосов
/ 06 ноября 2011

У меня есть 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

1 Ответ

0 голосов
/ 06 ноября 2011

Почему это должно быть глобальным и не содержаться в самом контроллере представления? Просто BOOL @property на вашем контроллере представления, который переключается. И, чтобы сохранить это постоянным при нескольких запусках вашего приложения, сохраните результат в NSUserDefaults, которые вы, в свою очередь, проверяете каждый раз, когда запускаете контроллер представления.

...