Является ли получение изменений автоматически через MergerChangesFromParent синхронным или асинхронным? - PullRequest
0 голосов
/ 03 марта 2020

Если я установлю для 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.

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