Если я установлю для automaticallyMergesChangesFromParent
основного контекста значение true и вызовет save()
в фоновом контексте, получит ли основной контекст изменения синхронно или асинхронно?
Я предполагаю, что automaticallyMergesChangesFromParent
реализуется путем мониторинга NSManagedObjectContextDidSave
уведомлений из родительского контекста или постоянного хранилища. Если это так, я думаю, что это должно быть синхронно. Но я не могу найти подтверждение в Apple do c.
. Причина, по которой я спрашиваю это, заключается в том, что я хотел бы обновить пользовательский интерфейс после вызова save()
в фоновом потоке. Поэтому мне нужно убедиться, что изменения были распространены в основной контекст после завершения save()
.
Фон :
Я думаю о выполнении всех изменений в Основные данные в выделенном фоновом контексте. Таким образом, если пользователь добавляет новую запись в пользовательский интерфейс, основной поток будет вызывать backgroundContext.performAndWait()
. Закрытие включает операции CRUB и вызов save()
. Я установил automaticallyMergesChangesFromParent
в моем основном контексте, чтобы он получал изменение автоматически.
Вопрос в том, когда подходящее время для обновления пользовательского интерфейса. Я думаю обновить интерфейс сразу после backgroundContext.performAndWait()
, поэтому очень важно, чтобы после завершения вызова save()
в фоновом контексте изменения были распространены в основной контекст синхронно. Вот причина моего вопроса.
Может, мне вместо этого использовать дочерний контекст? Я думаю, что в моей вышеупомянутой архитектуре я использую фоновый контекст как-то как дочерний контекст. Из Apple do c кажется, что вызов save()
в дочернем контексте синхронно распространяет изменения в родительский контекст.
Примечание : я знаю, что использовать * 1031 звучит немного нелепо * + фоновый контекст. Это мое первое приложение, и я изначально рассматривал возможность использования perform()
+ фонового контекста. Я изменил его на performAndWait()
только потому, что синхронный интерфейс менее запутан для пользователя. Кроме того, я знаю, что мог бы просто выполнять операции CRUD в главном контексте (я сделаю это, если потребуется). Я просто хочу изучить различные возможности использования Core Data.