Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
carkov_1990
19 / 8 / 1
Регистрация: 28.12.2012
Сообщений: 32
#1

Обновление данных в таблице - Программирование iOS/iPhone

15.04.2013, 17:16. Просмотров 1271. Ответов 7
Метки нет (Все метки)

Добрый день!
При работе над проектом возник вопрос...
Есть таблица, есть метод загрузки данных с сервера. Когда приходят данные метод должен обновить данные в таблице.
Это все понятно и ясно. Делается просто
Objective-C
1
[self.table reloadData];
Но это происходит не сразу, а через какое то время. Почему так? Почему данные не сразу загружаются? Тоже самое и с сообщениями UIAlert и UIToast. Они появляются не сразу, а через какое то время. Как сделать чтобы данные действия выполнялись сразу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
16.04.2013, 09:02     Обновление данных в таблице #2
- reloadData метод всего лишь говорит вашему UITableView "перезапросить данные" у dataSource своего.
Ни про какой сервер там даже речи не идет.
Но если вы в делегатовском методе (например - tableView:cellForRowAtIndexPath обращаетесь к удаленному серверу - ну тогда конечно же будет задержка. Время на передачу данных и на обработку запроса еще никто не смог убрать.

Цитата Сообщение от carkov_1990 Посмотреть сообщение
Как сделать чтобы данные действия выполнялись сразу?
Опять же - что такое сразу? 20 лет назад одно и то же действие занимало часы, сейчас доли секунды.
Это "сразу" или нет?
Если идет работа с удаленным сервером - то по существу задержку не убрать вообще никак. Ее можно только минимизировать, но тут разнообразных техник очень много, и это тема отдельного разговора.

А делается все просто - сначала запрашиваете данные с сервера, запоминаете ответ, а потом вызываете -reloadData, и в делегатовских методах отдаете уже запрошенные данные.
А пока идет запрос - показываете индикатор сетевой активности/etc.


Цитата Сообщение от carkov_1990 Посмотреть сообщение
Почему данные не сразу загружаются?
А на этот вопрос я отвечу кратко - "потому что гладиолус".

Не по теме:

Не удержался



Учитесь формулировать вопросы по существу. (Насколько я понял чуть позже, они все таки УЖЕ были загружены, это отображение их "запазывает", так?)

UPD:
Перечитал на несколько раз вопрос...
На ум еще что пришло - может вы не в главном потоке чтото делаете?
carkov_1990
19 / 8 / 1
Регистрация: 28.12.2012
Сообщений: 32
16.04.2013, 09:50  [ТС]     Обновление данных в таблице #3
zulkis, за гладиолус конечно спасибо. Алгоритм такой- при загрузке страницы в didLoad идет запрос асинхронный на сервер. После получения данных вызывается в контроллере (делегированием) функция onComplete,которая сохраняет данные в source таблицы и делает reloadDate. Все методы создания ячейки и возвращения ее таблице(т.е. заполнение таблицы) определены. Но после reloadData в переопределенные методы приходит примерно через секунд 5-6. Это если ничего не делать,а вот если например сдвинуть таблицу вниз, то данные загружаются моментально(т.е. мы приходим в переопределенные методы). Вот и возник вопрос почему так и как это можно исправить?
Dan_banan_
10 / 10 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
16.04.2013, 17:20     Обновление данных в таблице #4
Проверяй загрузку данных...данные должны быть предварительно загружены...reloaddate сразу обновляет данные если они подгруженны никаких задержек там не должно быть
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
16.04.2013, 18:06     Обновление данных в таблице #5
А как насчет потокобезопасности? Весь UI код должен в главном потоке вызываться. Так что в этом самом onComplete я бы написал что-то типа такого:
Objective-C
1
2
3
dispatch_async(dispatch_get_main_queue(), ^{
        [tableView reloadData];
    });
Dan_banan_
10 / 10 / 1
Регистрация: 03.03.2013
Сообщений: 87
Записей в блоге: 1
16.04.2013, 22:16     Обновление данных в таблице #6
ну или так
Objective-C
1
[self.tableView perfomSelectorOnMainThread:@selector(reloadDate) object:nill]
alexpac26
14 / 22 / 0
Регистрация: 20.01.2013
Сообщений: 125
17.04.2013, 16:40     Обновление данных в таблице #7
Есть таблица, есть метод загрузки данных с сервера. Когда приходят данные метод должен обновить данные в таблице.
дождитеcь полной или частичной загрузки данных и только после этого вызывайте [self.table reloadData];

дождаться можно через вот этот класс

http://www.imaladec.com/story/apidownload
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 18:51     Обновление данных в таблице
Еще ссылки по теме:

Обновление Enterprise приложения
Обновление Annotation на MKMapView Swift
Обновление одного контроллера другим
Обновление iphone 4s
Swift Почему не работает переход после клика по cell в результате поиска по таблице?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
perlik
38 / 38 / 1
Регистрация: 26.01.2013
Сообщений: 140
21.04.2013, 18:51     Обновление данных в таблице #8
Я вобще решил все просто. я прилепил 2 виду обновления вручную. первый кнопка второй с анимацией как у tweetbot. потом будет время сделаю автоматом. просто не так часто новости обновляются, что бы ставить автомат туда
Yandex
Объявления
21.04.2013, 18:51     Обновление данных в таблице
Ответ Создать тему
Опции темы

Текущее время: 13:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru