我通过子类化 UITableViewController 和 UITableViewSource (不是 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-推荐答案 strong>
您应该在 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/
|