2015-12-24 1 views
0

У меня есть segmentedControl и tableView под ним.Остановить cellForRowAtIndexPath при отрезке сегментов

SegmentedControl имеет два сегмента: «Новости» и «События».

Новости и события загружаются в var news = [News]() в func getJson(type: Int).

Для новостей - news.type = 1, для мероприятий news.type = 2.

Мой getJson метод:

func getJson(type: Int) { 
    self.news = [] // empty news array 
    if jsonData["type"] == type { 
     // save needed news to array 
     self.news.append(News(id: jid, title: jtitle, subtitle: jsubtitle, urlstring: jurlstring, image: jimage!)) 
    } 
} 

Таким образом, проблема, когда я прокрутки и нажмите второй сегмент быстро, приложение аварии:

enter image description here

Поскольку между self.news = [] и self.news.append в getJson, здесь идет cellForRowAtIndexPath.

Мой вопрос заключается в том, как остановить cellForRowAtIndexPath, когда я нажимаю сегменты? Благодарю.

+0

Что вы возвращаете в 'numberOfRowsInSection'? и вы вызываете 'reloadData', когда вы переключаете сегменты и начинаете загрузку данных? – Paulw11

+0

Я возвращаю 'news.count'. Я звоню. Проблема заключается в том, что 'tableView' хранит заполняющие ячейки, но' getjson' does 'self.news = []' – aaisataev

+1

Обычно вы загружаете свои данные во временный массив и затем копируете данные в 'self.news' после его загрузки, а затем call reloadData – Paulw11

ответ

2

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

Типичный подход заключается в том, чтобы загрузить данные во временный массив в сетевой сетевой код, а затем назначить это фактическому массиву (self.news в вашем случае) после завершения загрузки и в этот момент вызвать reloadData на вашем столе.

Возможно, вы также захотите рассмотреть опыт пользователя во время загрузки данных. Я бы, наверное, сделать что-то вроде этого:

  1. При изменении сегмента, скрыть TableView и отобразите в UIActivityIndicatorView, которая центрируется на расположении Tableview в
  2. Начать загрузку из сети во временный массив
  3. Когда загрузка завершена правопреемником его self.news
  4. Обновить данные таблицы
  5. скрыть UIActivityView и сделайте видимым Tableview