Почему могут быть внесены изменения из одного NSManagedObjectContext в другой без явного слияния? - PullRequest
0 голосов
/ 18 марта 2010

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

Насколько я понимаю, никакие изменения никогда не будут объединены, если это не сделано явно ... кто-нибудь знает, что здесь происходит?

1 Ответ

1 голос
/ 19 марта 2010

Насколько я понимаю, никакие изменения никогда не будут объединены, если это не сделано явно ...

Это не правильно. Я думаю, что после вашего 5) вы обновили Artists в основном контексте, верно? Любая выборка всегда идет вниз на диск, получая доступ к файлу. Если это после сохранения из другого контекста, то вы получите новые записи, которые вы только что создали. Если есть конфликты, они будут рассматриваться в соответствии с вашим mergePolicy, см. этот документ Apple .

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