Question

Je travaille sur une fonction d'importation d'objets qui utilise plusieurs threads / NSManagedObjectContexts, en utilisant http://www.mac-developer-network.com/columns/coredata/may2009/ comme guide (note que je suis en développement pour iPhone).

Pour une raison quelconque, quand je sauve un de mes contextes l'autre est immédiatement mis à jour avec les changements, même si je l'ai commenté mes appels à mergeChangesFromContextDidSaveNotification. Y a-t-il des raisons pour lesquelles les contextes peuvent être fondre dans un autre sans un appel explicite?

Voici un journal de ce qui se passe:

// 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"
)

Comme vous pouvez le voir, le contexte de test est enregistré à mi-chemin, et le contexte principal a tout à coup les nouveaux objets du contexte de test, même si je ne l'ai pas réalisé tout le combo NSManagedObjectContextDidSaveNotification / mergeChangesFromContext.

Si je comprends bien qu'aucun changement ne jamais être fusionné à moins que fait explicitement ... personne ne sait ce qui se passe ici?

Était-ce utile?

La solution

  

Si je comprends bien qu'aucun changement ne jamais être fusionné à moins que fait explicitement ...

Ce n'est pas correct. Je suppose que, après votre 5) vous refetched Artists dans le contexte principal, non? Tout va toujours vers le bas d'extraction sur le disque, l'accès au fichier. Si c'est après la sauvegarde d'un contexte différent, que de nouvelles entrées vais chercher vous venez de créer. S'il sont des conflits, ceux-ci seront traités selon votre mergePolicy, voir cette pomme doc .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top