OGeek|极客世界-中国程序员成长平台

标题: c# - UITableViewController 收到内存警告后为空 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 19:58
标题: c# - UITableViewController 收到内存警告后为空

我通过子类化 UITableViewControllerUITableViewSource(不是 UITableViewDataSource !!!)在 MonoTouch 中绘制表格 View 。在我的 View Controller 的构造函数中,我这样设置 TableView 源:

TableView.Source = new CustomTableViewSource();

在我的 CustomTableViewSource 中,我正在构建表格 View 的单元格。它工作得很好,除非我在 iPhone 模拟器中模拟内存警告。如果 View 被隐藏(例如,选择了选项卡栏中的其他 View Controller ),当我回来时,表格 View 只是空白(白色背景,不再有表格 View )。

但是,我在 DidReceiveMemoryWarning 回调中什么也没做。我还尝试在 viewWillAppear 中再次设置 TableViewSource (如果收到内存警告),但没有成功......

这是垃圾收集器的问题吗?我知道收到内存警告时会调用 GC.Collect 。也许垃圾收集器只是丢弃了我的 View ,我需要再次完全显示它?



Best Answer-推荐答案


您应该在 ViewDidLoad 方法中初始化表源,而不是在构造函数中。该方法在加载 View Controller 时调用,然后在每次出现内存警告后需要重新创建 Controller View 时调用。

我做了一些测试,在出现内存警告后得到了类似的结果。但是,我只得到一个空 TableView 。当我再次在 ViewWillAppear 中设置表源时,该表已正常填充数据。

您在 ViewWillAppear 中的实现不起作用的事实让我认为该方法甚至没有被调用。如果是这种情况,我猜您的表格 View 在需要时没有被重新创建。

当您使用的 Controller 的 View 不是从 XIB 文件创建时,这可能会在某些情况下发生。在这种情况下,您应该在 LoadView 方法中创建 View (不调用 base.LoadView()):

public override void LoadView()
{
    this.View = new UITableView(UIScreen.MainScreen.ApplicationFrame); //or something similar
}

我遇到了类似的问题(未重新创建的 TableView ),其中包含导航 Controller 、 View Controller 等的选项卡 Controller 的复杂层次结构。当我提供 LoadView 方法时,这些问题得到了解决。

我没有猜测;)

关于c# - UITableViewController 收到内存警告后为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9913206/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4