弹出视图控制器后 UITableview 丢失参考
Posted
技术标签:
【中文标题】弹出视图控制器后 UITableview 丢失参考【英文标题】:UITableview lost reference after pop view controller 【发布时间】:2017-02-23 08:49:21 【问题描述】:例如,我有 ViewController1
和 UITableview
对象和数据。然后我将从 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 中显示的数据
在弹出窗口的标签栏中取消导航控制器中的 UITableView 搜索后,UINavigationBar 无响应