我有一个 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
}
}
奇怪的是,这段代码在一个视图控制器中可以完美运行,但不能在另一个视图控制器中运行。
通过一些调试,我发现在另一个视图控制器中执行了代码,但是分配 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;
}
...但我真的不明白发生了什么!你们当中有人可以解释这种行为吗?
提前致谢!
马可