【问题标题】:Unexpectedly found nil IBOutlet in prepareForSegue在 prepareForSegue 中意外发现 nil IBOutlet
【发布时间】:2016-07-13 16:26:06
【问题描述】:

我有一个详细视图控制器,我想将标签文本设置为使用 indexPath 行从数组中获取的值。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if(segue.identifier == "showView"){
        let detailVC: DetailViewController = segue.destinationViewController as! DetailViewController
        let indexPath = self.MainTableView.indexPathForSelectedRow!
        detailVC.label.text = "Test"
        self.MainTableView.deselectRowAtIndexPath(indexPath, animated: true)
        }
}

我不断收到一个致命错误:在展开可选值时意外发现 nil。我曾尝试将detailVC.label.text = "Test" 切换为detailVC.label.text = names[indexPath.row],但我每次都遇到相同的错误。

我使用相同的代码行来更改单元格的标签文本,没有错误,但是对于位于空白视图中心的这个标签,我似乎无法正确处理?有什么想法需要改变吗?

顺便说一下,详细视图控制器中的标签是@IBOutlet weak var label: UILabel!

【问题讨论】:

  • 您是否尝试过将属性添加到目标视图控制器并为其分配文本的值,然后仅将标签分配给 viewDidLoad 或 viewWIllAppear 中的文本?
  • 你在哪里得到了意外发现的 nil 错误?
  • @AlessandroOrrù 在控制台中
  • @MikeSchmidt,请参阅下面的 vadian 的回答

标签: ios swift xcode


【解决方案1】:

您无法访问prepareForSegue 中的DetailViewController 中的IBOutlets,因为它们尚未连接。

如cmets中所述,在DetailViewController中创建String属性,将其设置在prepareForSegue中,并在viewDidLoadDetailViewControllerviewWillAppear中设置标签的text属性。

【讨论】:

    【解决方案2】:

    另一种方法是在设置属性之前调用detailVC.loadViewIfNeeded()。它会加载你所有的IBOutlet's

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多