Почему изменения могут быть перенесены из одного NSManagedObjectContext в другой без явного слияния?
-
20-09-2019 - |
Вопрос
Я работаю над функцией импорта объектов, которая использует несколько потоков/NSManagedObjectContexts, используя http://www.mac-developer-network.com/columns/coredata/may2009/ в качестве моего руководства (обратите внимание, что я разрабатываю для iPhone).
По какой-то причине, когда я сохраняю один из моих контекстов, другой немедленно обновляется с изменениями, хотя я закомментировал свои вызовы mergeChangesFromContextDidSaveNotification.Есть ли какие-либо причины, по которым контексты могут сливаться друг с другом без явного вызова?
Вот лог того, что происходит:
// 1.) Main context is saved with "Peter Gabriel"
// 2.) Test context is created, begins with same contents as main context
// 3.) Main context is inserted with "Spoon"
// 4.) Test context is inserted with "Phoenix"
// Contents at this point:
CoreTest[4341:903] Artists in main context: (
"Peter Gabriel",
"Spoon"
)
CoreTest[4341:903] Artists in test context: (
"Peter Gabriel",
"Phoenix"
)
// 5.) testContext is saved
// New contents of contexts:
CoreTest[4341:903] Artists in main context: (
"Peter Gabriel",
"Phoenix",
"Spoon"
)
CoreTest[4341:903] Artists in test context: (
"Peter Gabriel",
"Phoenix"
)
Как вы можете видеть, тестовый контекст сохраняется на полпути, и в основном контексте внезапно появляются новые объекты из тестового контекста, хотя я не выполнил всю комбинацию NSManagedObjectContextDidSaveNotification/mergeChangesFromContext.
Насколько я понимаю, никакие изменения никогда не будут объединены, если это не будет сделано явно...кто-нибудь знает, что здесь происходит?
Решение
Насколько я понимаю, никакие изменения никогда не будут объединены, если это не будет сделано явно...
Это неправильно.Я думаю, после твоего 5)
вы повторно загрузили Artists
в основном контексте, да?Любая выборка всегда осуществляется на диск, обращаясь к файлу.Если это произойдет после сохранения из другого контекста, будут получены новые записи, которые вы только что создали.Если есть конфликты, они будут решены в соответствии с вашими mergePolicy
, видеть этот документ Apple.