【问题标题】:removeFromSuperView() and cells = fatal error: unexpectedly found nil while unwrapping an Optional valueremoveFromSuperView() 和单元格 = 致命错误:在展开可选值时意外发现 nil
【发布时间】:2016-04-02 17:48:01
【问题描述】:

我在 XIB 中使用 CustomCell 做一个小的 UITableView。

如果布尔值为 FALSE,我想删除视图。

所以我做的只是一个小功能:

func deleteStackOrNot(valeurPLIST: Bool, stack: UIStackView) {
if valeurPLIST {
    stack.hidden = false

} else {
    stack.removeFromSuperview()
      }
}

然后:

deleteStackOrNot((corpusArray[indexPath.row]["iconesNPBool"] as! Bool), stack: cell.iconesStackOutlet)

在第一次向下滚动时效果很好,在 2 个单元格上。但是,当我滚动回第一个单元格时,我得到:

fatal error: unexpectedly found nil while unwrapping an Optional value

指向函数调用。

我想我已经删除了出口,比如“永远”,现在 xcode 似乎无法重新创建它......

我也尝试过 .hidden 但我需要将其删除,因为当视图隐藏时约束仍然存在。

你怎么看?

【问题讨论】:

    标签: ios swift uitableview


    【解决方案1】:

    你有几个选择:

    1. 您可以将 UIStackView 属性添加到自定义单元格类中,以在视图不在层次结构中时保存视图并将其添加回来
    2. 您可以只使用堆栈视图创建一个 .XIB,然后通过加载它来构建一个新的。
    3. 如果堆栈视图为 nil,您可以在代码中重新创建堆栈视图
    4. 您不能删除它,而只能更改约束(或其大小)

    编辑:要做#1

    添加:

    var hiddenStack: UIStackView?
    

    然后,在你的 func 中(在注释所在的地方填写正确的代码):

    func deleteStackOrNot(valeurPLIST: Bool, stack: UIStackView) {
       if valeurPLIST {
          // put the hidden stack back in the view here
          // using self.hiddenStack
       } else {
          self.hiddenStack = stack
          stack.removeFromSuperview()
       }
    }
    

    【讨论】:

    • 我认为第四个选项应该没问题,但是我也尝试过,但是,当我执行 cell.mapOutlet.frame = CGRectMake(0, 0, 0, 0) 时没有任何变化……
    • 该框架可能与您的约束冲突。我推荐选项 #1 作为最简单且最有可能工作的选项
    • 嗯,我不确定我是否真的理解这意味着什么,但我会在谷歌上查找,除非有人知道如何说清楚?
    • 我遇到了同样的问题。我真的不知道我有多正确,但它可以满足我的需求。代码很简单:if let wv = cell.webView { if myBool == false { wv.removeFromSuperview() } }
    猜你喜欢
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2016-02-29
    • 2020-09-19
    • 2016-01-08
    相关资源
    最近更新 更多