2017-02-03 4 views
0

Я извлекаю данные из CloudKit, и в данных есть только один элемент.Ошибка приложения при загрузке таблицы Строка

Как только matchupнагрузок и перед тем цвет фона виден в пользовательском интерфейсе, то приложение падает. Я не могу понять, почему, какие-то идеи?

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() 
    } 

} 

UPDATE:

Получил аварии, с ошибкой "Фатальная ошибка: индекс вне диапазона".

Я не знаю, почему это, потому что matchupArray.count является 1, то rowCount 1. Он начал итерацию через for-loop с i как 0, и закончил первую итерацию, где она должна быть остановлена, так как там было только 1 шт. Но я получил крах, потому что он начал повторять цикл снова, с i как 1, а затем, очевидно, ничего не нашел, поэтому он разбился.

Аварийный сигнал приходит после row?.matchup.setText(self.matchupArray[i]).

+0

если вы делаете эту строку .groupColor.setBackgroundColor (colorBackground) на фоне потоков приложение может привести к сбою –

+0

@KuntalGajjar спасибо за ответ?! Хм, возможно, это похоже на то, что я нахожусь в фоновом потоке? Просто интересно, потому что это не похоже на то, что я прыгаю в фоновом потоке для 'getCloudKit', но я мог бы полностью потерять то, что кто-то вроде вас может увидеть быстрее меня. – SRMR

+0

Вы можете попробовать сделать это self.performSelectorOnMainThread (#selector (CLASSNAME. LoadTable), withObject: nil, waitUntilDone: true) –

ответ

2

Ошибка в строке:

for i in 0...rowCount 

Этот ... оператор создает целый ряд индексов, который включает оба значения, когда, потому что Swift использует 0 на основе массивов, вам нужно оператору ..< создать диапазон что исключает верхнее значение. Поэтому

Эта линия должна быть:

for i in 0..<rowCount 
Смежные вопросы