我有一个相对简单的问题,一段时间以来一直在逃避解决方案。我有一个视图控制器和一个关联的 XIB。视图控制器称为FooterViewController
. FooterViewController
的视图设置为 tableview 的页脚视图。
FooterViewController
的视图包括一个用于向用户显示反馈的标签。我希望这个标签一直存在,直到它的值被我的应用程序更改。在正常情况下,确实如此。但是,我刚刚开始使用内存警告进行测试,我发现在卸载视图以响应内存警告后,标签被清除。
到目前为止,这是我为解决问题所做的尝试:在FooterViewController
's viewWillUnload
方法中,我将标签的文本存储在一个名为的实例变量中statusString
:
- (void)viewWillUnload
{
statusString = [statusLabel text];
testInt = 5;
NSLog(@"View will unload; status string = %@; testInt = %d",
statusString, testInt);
[super viewWillUnload];
}
请注意,我还将另一个实例变量(声明为NSInteger testInt
)设置为 5。
然后,在FooterViewController
'sviewDidLoad
方法中,我尝试将标签的文本设置为statusString
:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Just before setting label, statusString: %@; testInt: %d",
statusString, testInt);
[statusLabel setText:statusString];
NSLog(@"View did load.");
}
但是,这不起作用。此外,在模拟内存警告后的日志中,我看到:
View will unload; status string = Invalid IP address Error code: 113; testInt = 5
(注意“Invalid IP address Error code: 113”是statusString的正确值)
然后,FooterViewController
再次导航到后,我看到:
Just before setting label, statusString: (null); testInt: 0
这向我表明,由于某种原因,FooterViewController
当视图再次加载时,实例变量正在重新初始化。最后一点:initWithNibName:bundle:
每次必须重新加载视图时都会调用该方法,尽管我希望如此;毕竟,视图必须从 NIB 重新加载。
所以,我的问题是:
- 为什么这些实例变量在卸载和重新加载视图的过程中似乎被取消或归零?
- 如果我做错了导致这种无效的事情,那是什么?
- 如果我没有做错任何事情,这是正常行为,我应该如何处理视图加载之间的维护状态?
谢谢,莱利