I'm pulling data in from CloudKit, and there is only one item in the data.
Once the matchup
loads, and before the background color is seen in the UI, the app crashes. I can't figure out why, any ideas?
InterfaceController
on Watch:
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()
}
}
UPDATE:
Got a crash, with the error "fatal error: Index out of range".
I'm not sure why this is, because the matchupArray.count
is 1, the rowCount
is 1. It started iterating through the for-loop
with i
as 0, and finished the first iteration where it should have stopped since there was only 1 item. But I got the crash because it started to iterate through the loop again, with i
as 1, and then obviously found nothing so it crashed.
The crash comes after row?.matchup.setText(self.matchupArray[i])
is run.
The error is in the line:
for i in 0...rowCount
This ...
operator creates a range of indexes that includes both values when, because Swift uses 0-based arrays, you need the ..<
operator to create a range that excludes the upper value.
This line should therefore be:
for i in 0..<rowCount