• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 19:58:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我通过子类化 UITableViewControllerUITableViewSource(不是 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-推荐答案


您应该在 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap