UITableView спит при вызове из NSOperation - PullRequest
1 голос
/ 29 января 2011

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

Если он это делает, NSOperation регистрируется и помещается в NSOperationQueue.

Когда NSOperation запускается (START QUEUE), он проверяет свой кэш и перезагружает данные с сервера (CALL IMPORT1).
После выполнения этой задачи операция отправляет уведомление в мой UITableView, который запрашивает базу данных (НАЧАТЬ ЧТЕНИЕ / ЗАВЕРШИТЬ ЧТЕНИЕ), а затем вызывает [self.tableView reloadData]; (ПЕРЕЗАГРУЗИТЬ ЗАПУСК ДАННЫХ)
Пока здесь все работает как положено. Даже если я импортирую около 1000 элементов.

То, что сводит меня с ума, так это то, что между "END QUEUE" и получением первой ячейки есть какой-то сон (CREATE CELL START). После этого сна клетки создаются, как и должно быть - очень быстро.

Я не могу понять, что вызывает этот "сон".

Может кто-нибудь дать мне подсказку, что происходит не так.

Заранее спасибо Борис

Вызывается в viewDidAppear

2011-01-29 15: 54: 34.460 [30488: 207] НАЧАТЬ ЧТЕНИЕ 2011-01-29 15: 54: 34.461 [30488: 207] КОНЕЦ ЧТЕНИЯ
2011-01-29 15: 54: 34.464 [30488: 207] ПЕРЕЗАГРУЗИТЬ ДАННЫЕ НАЧАЛО 2011-01-29 15: 54: 34.468 [30488: 207] ПОЛУЧИТЬ РАЗДЕЛЫ 2011-01-29 15: 54: 34.469 [30488: 207] ПОЛУЧИТЕ ГОЛОВУ 2011-01-29 15: 54: 34.470 [30488: 207] ПОЛУЧИТЬ ГОЛОВУ 2011-01-29 15: 54: 34.470 [30488: 207] ПОЛУЧИТЬ СТРОКИ
2011-01-29 15: 54: 34.471 [30488: 207] СОЗДАТЬ КЛЕТОЧНЫЙ СТАРТ 2011-01-29 15: 54: 34.473 [30488: 207] СОЗДАТЬ КЛЕТКУ СТОП 2011-01-29 15: 54: 34.474 [30488: 207] СОЗДАТЬ КЛЕТОЧНЫЙ СТАРТ
2011-01-29 15: 54: 34.475 [30488: 207] CREATE CELL STOP 2011-01-29 15: 54: 34.476 [30488: 207] СОЗДАТЬ КЛЕТКУ СТАРТ 2011-01-29 15: 54: 34.477 [30488: 207] СОЗДАТЬ КЛЕТОЧНУЮ ОСТАНОВКУ
2011-01-29 15: 54: 34.477 [30488: 207] ПОЛУЧИТЬ ГОЛОВУ

Вызывается с помощью уведомления (Жирные части являются новыми из-за NSOperation)

2011-01-29 15: 54: 04.719 [30488: 630b] СТАРТ ОЧЕРЕДЬ 2011-01-29 15: 54: 05.727 [30488: 630b] ВЫЗОВ ИМПОРТ1 НАЧАЛО
2011-01-29 15: 54: 05.750 [30488: 630b] CALL IMPORT1 STOP 2011-01-29 15: 54: 05.760 [30488: 630b] ПРОСМОТР ВЫЗОВА START
2011-01-29 15: 54: 05.767 [30488: 630b] НАЧАТЬ ЧТЕНИЕ
2011-01-29 15: 54: 05.771 [30488: 630b] КОНЕЦ ЧТЕНИЯ 2011-01-29 15: 54: 05.781 [30488: 630b] ЗАПУСК ДАННЫХ ПЕРЕЗАГРУЗКИ
2011-01-29 15: 54: 05.786 [30488: 630b] ПОЛУЧИТЬ РАЗДЕЛЫ 2011-01-29 15: 54: 05.791 [30488: 630b] ПОЛУЧИТЬ ГОЛОВУ 2011-01-29 15: 54: 05.797 [30488: 630b] ПОЛУЧИТЬ ГОЛОВУ
2011-01-29 15: 54: 05.802 [30488: 630b] ПОЛУЧИТЬ ряды
2011-01-29 15: 54: 05.806 [30488: 630b] CALL VIEW STOP 2011-01-29 15: 54: 05.811 [30488: 630b] КОНЕЦ КВАРТИРЫ 2011-01-29 15: 54: 10.770 [30488: 630b] СОЗДАТЬ КЛЕТОЧНЫЙ СТАРТ 2011-01-29 15: 54: 10.776 [30488: 630b] СОЗДАТЬ КЛЕТКУ СТОП 2011-01-29 15: 54: 10.777 [30488: 630b] СОЗДАТЬ СОТОВЫЙ СТАРТ
2011-01-29 15: 54: 10,778 [30488: 630b] CREATE CELL STOP 2011-01-29 15: 54: 10.778 [30488: 630b] СОЗДАТЬ КЛЕТКУ СТАРТ 2011-01-29 15: 54: 10.780 [30488: 630b] СОЗДАТЬ КЛЕТОЧНУЮ ОСТАНОВКУ
2011-01-29 15: 54: 10.781 [30488: 630b] ПОЛУЧИТЬ ГОЛОВУ

1 Ответ

0 голосов
/ 02 февраля 2011

Нашел решение ... NSOperation отправляет NSNotification во вторичном потоке на мой UITableViewController - это вызывает задержку.

Я нашел решение на этом сайте: http://cocoawithlove.com/2009/08/safe-threaded-design-and-inter-thread.html

Надеюсь, это кому-нибудь поможет!

...