应用程序崩溃表行负载

时间:2017-02-03 21:06:44

标签: ios swift uitableview watchkit

我从CloudKit中提取数据,数据中只有一个项目。

一旦matchup 加载 之前,在UI中看到背景颜色,应用程序崩溃。我无法弄清楚为什么,任何想法?

观看

InterfaceController

func loadTable() {
    self.rowTable.setNumberOfRows(self.matchupArray.count, withRowType: "rows")
    let rowCount = self.rowTable.numberOfRows

    for i in 0...rowCount  {
        let row = self.rowTable.rowController(at: i) as! Rows!
        row?.matchup.setText(self.matchupArray[i])
        let colorBackground = UIColor.init(hex: self.teamColorArray[i])
        row?.groupColor.setBackgroundColor(colorBackground)
    }

}

func getData() {
    cloud.getCloudKit { (game: [GameWatch]) in
        var teamColorArray = [String]()
        var matchupArray = [String]()

        for item in game {
            teamColorArray.append(item.teamColor)
            matchupArray.append(item.matchup)
        }

        self.teamColorArray = teamColorArray
        self.matchupArray = matchupArray

        self.loadTable()
    }

}

更新

崩溃,错误"致命错误:索引超出范围"。

我不确定为什么会这样,因为matchupArray.count为1,rowCount为1.它开始使用for-loop迭代i 0,并完成了它应该停止的第一次迭代,因为只有1项。但是我得到了崩溃,因为它开始再次循环遍历循环,i为1,然后显然没有发现它崩溃。

row?.matchup.setText(self.matchupArray[i])运行后发生崩溃。

1 个答案:

答案 0 :(得分:2)

错误在于:

for i in 0...rowCount

...运算符创建一系列索引,其中包含两个值,因为Swift使用基于0的数组,您需要..<运算符来创建排除较高值的范围。

因此该行应为:

for i in 0..<rowCount