Интерфейс блокировки основных данных после асинхронного NSURLConnection didLoadResource на iPhone - PullRequest
1 голос
/ 21 апреля 2010

Каждый раз, когда кто-то касается строки внутри UITableView, я запускаю серию асинхронных соединений NSURLC, которые загружают данные, а затем анализируют и сохраняют эти данные в Core Data.

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

NSURLConnection заключен в класс, который реализует протокол NSURLConnection, и когда NSURLConnection запускает didLoadResource, он запускает класс DataAdapter, который обрабатывает анализ и сохранение. Я думаю, это и есть причина блокировки моего пользовательского интерфейса.

Кто-нибудь имел дело с этим раньше? Какие у меня варианты? Поместить адаптер данных в NSOperation?

1 Ответ

3 голосов
/ 21 апреля 2010

По умолчанию Core Data работает с основным потоком, который является тем же потоком, который используется в пользовательском интерфейсе. Вам нужно либо создать отдельный контекст в другом потоке, либо (проще) дождаться окончания загрузки, прежде чем переносить информацию в Core Data. В данный момент Core Data останавливает основной поток и интерфейс, ожидая завершения загрузки некоторых данных.

См. Многопоточность с базовыми данными .

...