2015-06-05 2 views
0

Простите наивную природу этого вопроса, но, несмотря на мой поиск здесь, я не могу найти решение.Пользовательские ячейки не заполняют правильные данные при выключенном экране

В моем проекте у меня есть UITableView с пользовательскими ячейками, все из которых заполнены данными из API. На этом этапе, на основе желаемого дизайна, четыре ячейки видны на экране при запуске, и я должен прокрутить, чтобы увидеть остальные четыре. Каждая ячейка имеет два компонента; ярлык и UIView, который генерирует линейную диаграмму. Первые четыре ячейки работают нормально, но второй набор ячеек (которые находятся вне экрана при загрузке) правильно заполняет метку, но UIView не показывает правильный набор данных (он заполняется ранее использованными данными).

Как ни странно, если я коснусь одной из проблемных ячеек, ячейка немедленно перезагружается с правильными данными.

Для контекста, вот часть моего TableViewController;

... 
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return minions.count 
} 

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

    func minionCellAtIndexPath(indexPath:NSIndexPath) -> MinionCell { 
     let minion = minions[indexPath.row] 

     let cell = tableView.dequeueReusableCellWithIdentifier(minionCellIdentifier, forIndexPath: indexPath) as! MinionCell 

     if let name = minion.name { 

      cell.nameLabel?.text = minion.name ?? "Minion" 
      cell.lineChart?.graphPoints = minion.bandwidth ?? [1,2,3,4,5] 
     } else { 
      cell.nameLabel?.text = "No data available." 
      cell.lineChart?.graphPoints = [1,2,3,4,5] 
     } 
     return cell 
    } 
... 

Возможно ли, что мне нужно как-то «предварительно визуализировать» ячейки вне экрана при загрузке? Опять же, извините за наивный характер.

Как всегда, спасибо за ваше время!

ответ

0

Как вы, вероятно, знаете, ячейки, выходящие из экрана, повторно используются для новых строк. Вот почему новые строки поставляются со старыми графами. Тот факт, что если вы нажимаете на ячейку, график обновляется и отображается правильно, заставляет меня думать, что это проблема рисования. Попробуйте запуска силой перекроить по телефону setNeedsDisplay на представлении с графиком:

cell.lineChart?.graphPoints = [1,2,3,4,5] 
cell.lineChart?.setNeedsDisplay() 
+0

Это сделало трюк! Я даже не знал код 'setNeedsDisplay', но я посмотрел его и понял сейчас. Большое спасибо, @skyddict! Отметьте ваш ответ как правильный. – ZbadhabitZ

+0

Рад, что я мог помочь! – Teo

0

Я несколько скептически вашей функции minionCellAtIndexPath.

Причина, по которой вы получаете более старые данные снова, а не новее, вероятно, потому, что вы не сбрасываете ее. Перед тем, как ваши if let проверит, установите жестко закодированные значения, те, которые вы устанавливаете в своем другом. а затем снова запустите.