菜鸟教程小白 发表于 2022-12-12 19:58:46

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


                                            <p><p>我通过子类化 <code>UITableViewController</code> 和 <code>UITableViewSource</code>(不是 <code>UITableViewDataSource</code> !!!)在 MonoTouch 中绘制表格 View 。在我的 ViewController 的构造函数中,我这样设置 TableView 源:</p>

<pre><code>TableView.Source = new CustomTableViewSource();
</code></pre>

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

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

<p>这是垃圾收集器的问题吗?我知道收到内存警告时会调用 <code>GC.Collect</code> 。也许垃圾收集器只是丢弃了我的 View ,我需要再次完全显示它?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您应该在 ViewDidLoad 方法中初始化表源,而不是在构造函数中。该方法在加载 ViewController 时调用,然后在每次出现内存警告后需要重新创建 ControllerView 时调用。</p>

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

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

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

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

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

<p>我没有猜测;)</p></p>
                                   
                                                <p style="font-size: 20px;">关于c# - UITableViewController 收到内存警告后为空,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9913206/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9913206/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: c# - UITableViewController 收到内存警告后为空