three20 - TTTableViewController内存警告给出了空白屏幕,如何修复?

时间:2011-03-16 21:51:24

标签: iphone ios three20

这让我疯了。我正在使用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

当发生这种情况时,有谁知道该怎么办?谷歌小组一直没有帮助。

3 个答案:

答案 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 TwoCentStudiosproposed fix on github中的讨论。