viewWillAppear中的奇怪行为

时间:2011-11-06 10:34:41

标签: iphone objective-c global-variables viewwillappear

我有一个TabBar控制器,里面有一些标签栏项。

用户第一次点击标签栏项目时,我希望打开一个警报视图,以便用户可以阅读一些小指令提示。

我有一个全局变量(比如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的实际值。这个值仍然是NO。难以置信!!!

一个小的解决方法是使用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;
}

......但我真的不明白发生了什么!!!有人可以解释这种行为吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

为什么它必须是全局的并且不包含在视图控制器本身中?只需在视图控制器上切换一个简单的BOOL @property即可。并且,为了在应用程序的多次运行中保持这种持久性,请将结果保存到NSUserDefaults,然后每次启动视图控制器时都会检查这些结果。