c# - UITableViewController 收到内存警告后显示为空白

标签 c# ios xamarin.ios uitableview

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

TableView.Source = new CustomTableViewSource();

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

但是,我在 DidReceiveMemoryWarning 回调中没有执行任何操作。我还尝试在 viewWillAppear 中再次设置 TableViewSource (如果收到内存警告),但没有再成功...

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

最佳答案

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

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

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

在某些情况下,当您使用的 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/

相关文章:

ios - 如何在不使用 UIWebView 的情况下获取网站的标题和描述?

c# - 使用 MonoTouch 进​​行 JSON 反序列化

c# - 在每次单击按钮时添加行数据 GridView

ios - 每当圆形图像与 Xcode 中的 CGRect 相交时发出

ios - 在没有 Xcode 数据设计器的情况下使用核心数据迁移

ios - 在 Xamarin 中加载 PlayN 声音 Assets

xamarin - 向 Xamarin Forms iOS 中的条目添加底部边框,最后是图像

C# 删除分隔符之前/之后的字符串

c# - 如果字符串数据数组不同,则增加位置 C# (Unity)

c# - 添加自动筛选和排序会导致 Excel 崩溃