gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:50:25 26 4
gpt4 key购买 nike

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

TableView.Source = new CustomTableViewSource();

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

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

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

最佳答案

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

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

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

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

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

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

我猜不出 ;)

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com