2014-10-10 1 views
0

Мой текущий набор вверх следующий:поведение IOS UITableView нарушается, когда не активен

Root Tab Bar: вид

  • Коллекция с журналами
  • Bookmarks (с учетом таблицы)
  • Другие

Вы можете добавить закладку из журнала в виде коллекции, а также удалить ее оттуда.

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

Когда я добавляю закладку из представления коллекции, она добавляет ее в массив (через уведомление) и запрашивает перезагрузку таблицы. Поскольку исходная запись отсутствует, она проходит через описанные выше движения. Когда я снова нажимаю его, чтобы удалить закладку, запись удаляется из массива. Здесь он становится интересным, потому что первое, что вызывает таблица, - это не количество разделов или строк, а cellForRowAtIndexPath. Поскольку массив пуст, приложение вылетает из запроса данных по индексу 0.

Мой вопрос: почему создание ячейки вызывается в этом порядке? Есть ли способ избежать этого?

+0

трудно сказать, не видя никакого кода. Вы вызываете '[mytableview reloadData]' после обновления массива? – Oren

+0

Да. Вот что я имел в виду под «запросами перезагрузки таблицы». Отредактировано описание, чтобы упомянуть, что обновление выполняется с помощью NSNotification. –

ответ

0

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

[self.tableView setSeparatorStyle: !_helpText.hidden ? UITableViewCellSeparatorStyleNone : UITableViewCellSeparatorStyleSingleLine]; 
[self.tableView reloadData]; 

Это было для удаления линий, чтобы можно было отобразить сообщение. Однако это обновление использовало старые данные, поскольку reloadData не вызывался.

[self.tableView reloadData]; 
[self.tableView setSeparatorStyle: !_helpText.hidden ? UITableViewCellSeparatorStyleNone : UITableViewCellSeparatorStyleSingleLine]; 

Реверсирование исправлено.

0

Если вы изменили раздел, попробуйте позвонить - (void)reloadSections:(NSIndexSet *)sections перед вызовом reloadData

https://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UICollectionView_class/index.html#//apple_ref/occ/instm/UICollectionView/reloadSections:

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationLeft]; 
+0

Ваше предложение действительно помогло мне идентифицировать проблему. Вызов любых визуальных изменений в таблице заставил его сбой, поскольку он использовал старые данные, которые больше не существовали. См. Мой ответ. –

+0

га очень рад, что я мог бы помочь перевернутым способом – Oren