Запись в базовые данные из вторичного потока - PullRequest
0 голосов
/ 28 сентября 2011

У меня есть HTTP-вызов к URL, который возвращает мои данные в формате JSON, я их анализирую, затем мне нужно загрузить их в контексте основных данных.

Теперь я делаю это (синтаксический анализ - создание сущностей - принятие) в главном потоке, используя GCD (великая центральная диспетчеризация) для отправки блока в главную очередь.Вызов http асинхронный, так что все в порядке, но загрузка базы данных - нет, поэтому он замораживает мой пользовательский интерфейс: UITableView, поддерживаемый NSFetchedResultsController.

Я хочу выполнить эти последние задачиво вторичном потоке, но не знаю как!

Я что-то слышал о создании второго контекста, используя его во вторичном потоке, затем удаляю его и "обновляю" "основной" контекст, не надознаю, как объяснить.Может быть, есть WWDC ред.видео по этому аргументу тоже?Я не могу найти действительную документацию.

Можете ли вы мне помочь, загружая данные асинхронно, чтобы моя таблица никогда не прекращала прокручиваться?

1 Ответ

1 голос
/ 28 сентября 2011

Существует правило: один контекст для одного потока. Создайте новый контекст в своей основной очереди и работайте с ним.

Добавить наблюдателя для этого контекста: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(<#Selector name#>) name:NSManagedObjectContextDidSaveNotification object:<#A managed object context#>];

После того, как ваш синтаксический анализатор сделан и объекты в контексте, сохраните тот контекст, который выведет уведомление. В основной очереди перехватите это уведомление и вызовите контекстную очередь основной очереди - (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...