iOS - 致命错误:在调用reloadData()时解开Optional值时意外发现nil

时间:2016-08-02 23:03:35

标签: ios swift

我知道有很多关于这个错误的问题,但我经历了所有这些问题,但没有一个帮助过。我从我的主类调用函数addCell(),下面的代码就是我在TableViewControllerClass中的代码。我肯定将我的requestIdentifier“cell”链接到我的.storyboard中,并且数组“locations”和“times”肯定不是空的,因为我在发生错误时打印它们,所以问题必须是我的“table”变量,这也正确地链接到表视图,但由于某种原因显然是零。有什么建议吗?

func addCell(){

    //update to insertion sort

    currLocation = addLocation

    if (locations == [""] && times == [0]) {

        self.locations.removeAll()

        self.times.removeAll()

    }

    if !(locations.isEmpty){

        if locations[locations.count-1] != currLocation {

            var count = 0

            var neverVisited = true

            for location in locations{

                if location == currLocation{

                    neverVisited = false

                    times[count] += addTime

                    count++

                }

            }

            if neverVisited {

                locations.append(currLocation)

                times.append(addTime)

            }

        } else {

            times[times.count-1] = addTime

        }

    } else {

        locations.append(currLocation)

        times.append(addTime)

    }

    print(locations) //not empty
    print(times) //not empty

    table.reloadData() //crashes here

}




override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

    cell.textLabel?.text = locations[indexPath.row] + ", \(times[indexPath.row])"

    }

    return cell

}

1 个答案:

答案 0 :(得分:0)

在调用reloadData函数之前,你可以在addCell()函数的最后或开头使用一个guard语句来解决问题(取决于你是否想要执行所有逻辑,即使表还不存在): / p>

guard let tmpTable = table else {
        return
    }

你也可以使用:

if let tmpTable = table else {
        tmpTable.reloadData()
    }

这样,只有在您的表已经加载时才会调用导致问题的函数。 使用你的主类也有点奇怪,通常这个类不用于执行任何代码/逻辑,尝试使用正确的控制器。