弹出视图控制器后 UITableview 丢失参考

Posted

技术标签:

【中文标题】弹出视图控制器后 UITableview 丢失参考【英文标题】:UITableview lost reference after pop view controller 【发布时间】:2017-02-23 08:49:21 【问题描述】:

例如,我有 ViewController1UITableview 对象和数据。然后我将从 ViewController1 推送到另一个控制器到 ViewController2

我的问题是当我尝试从ViewController2 弹出到ViewController1 然后UITableview 对象返回nil 并且我的应用程序崩溃了。这个问题经常发生。

我正在使用情节提要分配UITableview。我使用swift 2.0 作为编程语言。

下面是我的应用程序崩溃的源代码。

  override func viewDidAppear(animated: Bool)

    super.viewDidAppear(true)
    btnRightBarBtnItem.image = UIImage(named : "Home")
    btnRightBarBtnItem.target = self
    btnRightBarBtnItem.action = #selector(self.btnHomeAction)

    refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
    refreshControl.addTarget(self, action: #selector(SelectPackingItemsViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
     packingItemsTableView.addSubview(refreshControl)   

App 在“packingItemsTableView.addSubview(refreshControl)”这一行崩溃了。

它在日志中返回 (lldb) po self.packingItemsTableView! 致命错误:在展开可选值时意外发现 nil

刷新控件不过是“UIRefreshControl() 对象”,它不为零。

【问题讨论】:

在应用崩溃的地方添加你的代码工作。 分享崩溃日志或您的来源。在视图生命周期事件期间是否以编程方式删除了任何视图? viewDidAppear 中声明并初始化您的refreshControl 对象并尝试再次运行代码或将所有viewDidAppear 代码移动到viewDidLoad 【参考方案1】:

在弹出第二个控制器后检查表视图的数据是否仍然存在,可能是它没有获取它的数据源。对包含 tableview 数据的 Array 保持强引用

【讨论】:

以上是关于弹出视图控制器后 UITableview 丢失参考的主要内容,如果未能解决你的问题,请参考以下文章

UIPopOverController + UITableView - 选择单元格时隐藏弹出框

调整弹出视图控制器的大小以适应要在 UITableView 中显示的数据

弹出视图后出现错误的 UIToolbar

在弹出窗口的标签栏中取消导航控制器中的 UITableView 搜索后,UINavigationBar 无响应

仅当键盘覆盖视图时如何更改 UITableView 内容插图?

处理 UITableView 单元格上的平移手势