这让我疯了。我正在使用three20的TTTableViewController,当我收到内存警告时,屏幕变白。现在,在阅读了三个20谷歌组之后,似乎已经发布了tableView。但是,我不能为我的生活找出检查,看看是否是这种情况,然后再创建它。
我使用以下内容是因为我认为它可以解决问题,但似乎它不满足if语句:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// If we don't have a datasource we need to reset it
if (!self.dataSource) {
// Create datasource again
}
}//end
当发生这种情况时,有谁知道该怎么办?谷歌小组一直没有帮助。
答案 0 :(得分:0)
你是否继承TTTableViewController?我之前没有使用它,但假设它就像UITableViewController ......
你的“viewDidUnload”看起来怎么样?你在这里发布了tableview吗?如果是这样,您需要在viewDidLoad中创建tableview以匹配它。
无需检查viewDidAppear中是否有dataSource,因为如果您阅读View编程指南,它会解释内存警告将调用“viewDidUnload”,以便您有机会清理在“viewDidLoad”中创建的数据。 / p>
答案 1 :(得分:0)
我有同样的问题,它也让我疯狂。
没有人在三十二个文档中提及它,但你不应该使用UIViewController的initWithNibName函数来添加子视图。如果这样做,内存警告将释放这些子视图。
尝试将代码从initWithNibName函数移动到viewDidLoad函数。我注意到一些代码需要保存在initWithNibName中,例如导航样式。但是,添加到控制器视图的任何子视图都应该在viewDidLoad函数中。
答案 2 :(得分:0)
通常,您应该小心在viewDidLoad
而不是类构造函数中设置视图。例如,您应该在viewDidLoad
而不是启动器视图控制器的构造函数中设置启动器视图,否则在内存警告后您的启动器将变空。
对于TTTableViewController但是(通常)不适用,因为您没有手动设置表视图。我遇到了同样的问题,并最终将其追踪:我重新定义了viewWillDisappear:
并忘记致电[super viewWillDisappear:animated]
。这意味着Three20控制器维护的有关视图状态的一些标志未正确更新。
我还发现,在调用didReceiveMemoryWarning
之前重新定义[self setEditing:NO]
以致电super
是有益的。我发现表格视图的状态另外混淆了(如果您不对表格使用编辑模式,这是不相关的。)
最后,Three20中存在一个错误,这意味着加载/清空/错误模式下的表将无法正常恢复;请参阅blog post by TwoCentStudios和proposed fix on github中的讨论。