Swift - 滚动备份时TableView崩溃

时间:2015-03-31 12:45:48

标签: ios uitableview swift

我一直在努力解决这个问题。我可以在标签单元之间自由滚动,因为它实际上会记住它们。但是如果我从我的视图中获取描述单元格,它会立即从内存中删除它并且不会将其取回。相反,当我滚动回到描述时,我只是得到“致命错误:在展开可选值时意外地发现了nil”。所以我有以下几段代码:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)
    tableView.delegate = self
    tableView.dataSource = self
    tableView.rowHeight = UITableViewAutomaticDimension
    tableView.estimatedRowHeight = 44.0
    tableView.reloadData()
}

我不知道viewWillAppear在这种情况下是否有任何重要性,但是如果它是告诉我的话。无论如何,这是为了填写我的表视图中的单元格:

func GetDescription(cell:descCell, indexPath: NSIndexPath) {
    cell.descText.text = descriptTextTwo.htmlToString
}

func GetTagCell(cell:basicTag, indexPath: NSIndexPath) {
    let item = tagResults[indexPath.row]!
    cell.titleLabel.text = item["tagname"]?.htmlToString
}

func GetValueCell(cell: basicTag, indexPath: NSIndexPath) {
    let item = tagResults[indexPath.row]!
    cell.valueLabel.text = item["value"]?.htmlToString
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if filledDescription == false {
        return getDescriptionAtIndexPath(indexPath)
    } else {
        return getTagAtIndexPath(indexPath)
    }
}

func getDescriptionAtIndexPath(indexPath:NSIndexPath) -> descCell {
    let cell = self.tableView.dequeueReusableCellWithIdentifier(descriptionCell) as descCell
    GetDescription(cell, indexPath: indexPath)
    filledDescription = true
    return cell
}

func getTagAtIndexPath(indexPath: NSIndexPath) -> basicTag {
    let cell = self.tableView.dequeueReusableCellWithIdentifier(tagCell) as basicTag
    GetTagCell(cell, indexPath: indexPath)
    GetValueCell(cell, indexPath: indexPath)
    return cell
}

那么如何让Swift记住第一个单元格中的内容呢?因为我猜这就是发生的事情,所以一旦你将它从视图中删除它就会删除第一个单元格中的内容。我猜我必须用“indexPath”做一些事情,但我不确定如何在这种情况下实现它,如果我很远,请告诉我我做错了什么。谢谢!

1 个答案:

答案 0 :(得分:1)

更改以下内容:

 if filledDescription == false {
     return getDescriptionAtIndexPath(indexPath)
 } else {
     return getTagAtIndexPath(indexPath)
 }

使用:

 if indexPath.row == 0 {
     return getDescriptionAtIndexPath(indexPath)
 } else {
     return getTagAtIndexPath(indexPath)
 }

这将确保表格中的第一个单元格始终被视为&#34;描述&#34; 单元格。由于filledDescription在您设置为false后永远不会变为true,当您返回第一个单元格时,它会被视为&#34;标记&#34; < / strong>单元格(由于if行),实际上可重复使用的单元格包含&#34;描述&#34; 单元格数据