2016-07-02 3 views
0

Есть ли разница между запуском операции CoreData (CRUD) с использованием частного контекста с использованием performBlock и инициированием такой операции с использованием основного контекста в очереди отправки dispatch_async?Контент CoreData и NSManagedObject Контекст - частный vs. main

Это просто случай, когда нельзя использовать основной контекст в фоновом потоке?

Ссылка на яблочные документы - here.

ответ

3

Вы должны never использовать контекст главной очереди в фоновом режиме. Это нарушает правила ограничения потока.

Контекст главной очереди должен быть доступен только из основной очереди (очередь/поток пользовательского интерфейса) или из performBlock. Если вам нужно выполнить задачу, не связанную с UI, тогда вы должны создать контекст частной очереди и получить к ней доступ через performBlock.

Чтобы убедиться, что у вас есть правильная нарезка данных сердечника, вы можете включить настройку времени работы -com.apple.CoreData.ConcurrencyDebug 1.

+0

Я получаю это. Но я тестировал два варианта, и они оба работают. Поэтому мой вопрос заключается в том, просто ли удача в том, что запрещенный подход работает ... – goggelj

+0

Это нарушение потока, что означает, что он будет работать * в большинстве случаев, а затем не работает с высоким риском повреждения данных. Вот почему существует настройка отладки; потому что резьбовые ошибки не отображаются последовательно. –

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

  • Нет связанных вопросов^_^