Почему изменения могут быть перенесены из одного NSManagedObjectContext в другой без явного слияния?

StackOverflow https://stackoverflow.com/questions/2472955

Вопрос

Я работаю над функцией импорта объектов, которая использует несколько потоков/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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top