2016-01-14 2 views
0

Я попытался написать пробную демонстрацию для приложения IM, поэтому я разработал простой пользовательский интерфейс для общения с другим приятелем: пока я отправляю сообщение, я перезагружу UITableView, чтобы показать сообщение так же, как я получаю сообщение. Проблема заключается в том, что когда я отправляю сообщение, UITableView будет обновляться после вызова метода reloadData, но когда я получаю сообщение, он вообще не работает, мне нужно потянуть вверх или вверх по UITableView, после чего он обновится , Я установил делегат dataSource и UITableView, и я связал свойство IBOutlet с файлом nib, я проверял значение свойства IBOutlet до того, как я вызываю reloadData (он содержит допустимое значение), и я проверил значение dataSource (когда я получил сообщение, это значение изменилось, и в него было добавлено одно сообщение). Итак, пожалуйста, скажите мне, что с ним не так?UITableView reloadData не работает?

+0

Вы действительно вызываете 'reloadData' в основном потоке? Все действия пользовательского интерфейса должны быть вызваны из основного потока, иначе произойдет непредвиденное. – Tim

+0

Большое спасибо. Я понял причину, как вы объяснили, и я обнаружил, что метод получения сообщения вызывается дочерним потоком и. Так измените мой исходный код как: –

ответ

0

Спасибо @ Тим очень much.I поймали причину, как вы объяснили, и я обнаружил, что способ получить сообщение вызывается ребенком нить and.So изменить мой исходный код:

dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.tv_chat_records reloadData]; 
    }); 

это работает!

+0

Будьте осторожны с использованием 'self' в блоках. Это может привести к удержанию циклов и, следовательно, утечек памяти. Как правило, лучше использовать слабый собственный шаблон при использовании асинхронных блоков. – Tim

+0

ОК, я думаю, что хочу, еще раз спасибо. :-) –

Смежные вопросы