2017-02-03 3 views
0

Ich ziehe Daten aus CloudKit, und es gibt nur ein Element in den Daten.App-Absturz bei Tabellenzeile Laden

Sobald die matchupLasten und vor die Hintergrundfarbe in der Benutzeroberfläche zu sehen ist, die App stürzen. Ich kann nicht verstehen warum, irgendwelche Ideen?

InterfaceController auf 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:

einen Absturz kam, mit dem Fehler "fatale Fehler: Index out of range".

Ich bin mir nicht sicher, warum dies ist, weil die matchupArray.count 1 ist, die rowCount ist 1. Es begann die for-loop Iterieren durch mit i als 0 und beendete die erste Iteration, wo sie aufgehört haben sollte, da nur dort war 1 Artikel. Aber ich habe den Absturz, weil es begann, die Schleife erneut zu durchlaufen, mit i als 1, und dann offensichtlich nichts gefunden, so dass es abgestürzt ist.

Der Absturz kommt, nachdem row?.matchup.setText(self.matchupArray[i]) ausgeführt wird.

+0

, wenn Sie diese Zeile tun .groupColor.setBackgroundColor (colorbackground) auf app Hintergrund-Thread –

+0

@KuntalGajjar Dank für die Antwort abstürzen könnte?! Hmm, das könnte es sein, sieht es so aus als wäre ich auf einem Hintergrund-Thread? Ich frage mich nur, weil es nicht so aussieht, als ob ich auf einen Hintergrund-Thread für 'getCloudKit' hoppe, aber vielleicht fehlt mir etwas, das jemand wie du schneller sehen könnte als ich. – SRMR

+0

können Sie versuchen, dies self.performSelectorOnMainThread (#selector (CLASSNAME. LoadTable), withObject: nil, waitUntilDone: true) –

Antwort

2

Der Fehler ist in der Zeile:

for i in 0...rowCount 

Dieser ... Betreiber eine Reihe von Indizes erstellt, die beide Werte enthält, wenn, weil Swift verwendet 0-basierte Arrays, müssen Sie den ..< Bediener einen Bereich zu schaffen, das schließt den oberen Wert aus.

Diese Linie sollte daher sein:

for i in 0..<rowCount