我通过子类化 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 ,我需要再次完全显示它?
您应该在 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/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |