Erreur iPhone Coredata (NSMergeConflict pour NSManagedObject)
Parfois, j'ai cette erreur avec coredata dans le même lieu. Parfois, c'est ok, et en d'autres temps, j'ai cette erreur. Ça veut dire quoi? Je ne trouve rien à ce sujet 🙁
ps désolé pour mon anglais 🙂
conflictList = (
"NSMergeConflict (0xd447640) pour NSManagedObject (0xd41b370) avec objectID '0xd41b500' avec oldVersion = 4 et nouvelleversion = 5 et de l'ancien objet instantané = {\n album = \"{(\n)}\";\n audios = \"{(\n)}\";\n bdate = \"\";\n ville = \"\";\n pays = \"\";\n dialogue = \"{(\n)}\";\n domaine = \"blanc.la fumée\";\n faculté = 0;\n facultyName = \"\";\n prenom = Blanc;\n graduation = 0;\n homePhone = \"\";\n isFriend = 1;\n isMe = 0;\n lastName = Fumée;\n mobilePhone = \"\";\n pseudo = \"\";\n ligne = 1;\n photo = \"\";\n photoBig = \"\";\n photoComments = \"{(\n)}\";\n photoMedium = \"\";\n photoRec = \"http://cs10609.vkontakte.ru/u79185807/e_8c949409.jpg\";\n photos = \"{(\n (entité: Photo; id: 0xd482c50 ; données: {\n aid = 121594781;\n album = nil;\n commentaires = \\"\\";\n commentsCount = 0;\n créé = \\"2010-12-10 03:45:01 GMT\\";\n propriétaire = \\"0xd41b500 \\";\n \\"owner_id\\" = 79185807;\n photosNumber = 0;\n pid = 196997145;\n src = \\"http://cs10609.vkontakte.ru/u79185807/121594781/m_\\";\n \\"src_big\\" = \\"http://cs10609.vkontakte.ru/u79185807/121594781/x_\\";\n \\"src_small\\" = \\"http://cs10609.vkontakte.ru/u79185807/121594781/s_\\";\n \\"src_xbig\\" = nil;\n \\"src_xxbig\\" = nil;\n wallRel = \\"0xd480840 \\";\n}),\n (entité: Photo; id: 0xd431570 ; données: {\n aid = 121594781;\n album = nil;\n commentaires = \\"\\";\n commentsCount = 0;\n créé = \\"2010-12-10 03:43:01 GMT\\";\n propriétaire = \\"0xd41b500 \\";\n \\"owner_id\\" = 79185807;\n photosNumber = 0;\n pid = 196997029;\n src = \\"http://cs10609.vkontakte.ru/u79185807/121594781/m_\\";\n \\"src_big\\" = \\"http://cs10609.vkontakte.ru/u79185807/121594781/x_\\";\n \\"src_small\\" = \\"http://cs10609.vkontakte.ru/u79185807/121594781/s_\\";\n \\"src_xbig\\" = nil;\n \\"src_xxbig\\" = nil;\n wallRel = \\"0xd42d500 \\";\n})\n)}\";\n = \"de 19\";\n sexe = 0;\n statuts = \"{(\n)}\";\n timezone = 0;\n uid = 79185807;\n université = 0;\n universityName = \"\";\n vidéos = \"{(\n)}\";\n mur = \"{(\n)}\";\n wallPostsCount = 0;\n wallReplies = \"{(\n (entité: WallReply; id: 0xd448270 ; données: )\n)}\";\n wallSender = \"{(\n)}\";\n} et de nouveau mis en cache row = {\n bdate = \"\";\n ville = \"\";\n pays = \"\";\n domaine = \"blanc.la fumée\";\n faculté = 0;\n facultyName = \"\";\n prenom = Blanc;\n graduation = 0;\n homePhone = \"\";\n isFriend = 1;\n isMe = 0;\n lastName = Fumée;\n mobilePhone = \"\";\n pseudo = \"\";\n ligne = 1;\n photo = \"\";\n photoBig = \"\";\n photoMedium = \"\";\n photoRec = \"http://cs10609.vkontakte.ru/u79185807/e_8c949409.jpg\";\n = \"de 19\";\n sexe = 0;\n timezone = 0;\n uid = 79185807;\n université = 0;\n universityName = \"\";\n wallPostsCount = 0;\n}"
);
source d'informationauteur ruffnecktsk
Vous devez vous connecter pour publier un commentaire.
Un conflit de fusion parfois des résultats lors de votre base de données est modifié à partir de deux endroits différents, alors enregistré à partir de deux endroits différents, dans certains cas, les changements pourraient affecter les mêmes objets ou des propriétés, et la Base de Données n'est pas automatiquement les écraser, car cela pourrait détruire les données de valeur.
Il ya quelques options:
J'ai eu le même conflit de fusion, tout en économisant sur le contexte. voir apple doc ici
J'ai résolu les conflits en utilisant NSMergePolicy
ensemble policyType à
NSOverwriteMergePolicyType
lors de la création du NSMergePolicy objet`
En court - permettre la Fusion de la Politique de l'ajouter à votre MOC de l'installation:
objective-C
Swift
C'est semisolving, peut-être 🙂
Par exemple, vous avez le code suivant, qui existe dans de N objets (chacun d'entre eux sont dans le thread séparé et sont créés dans le même temps (+-10ms)):
De temps pour le traitement de routine dans le contexte d'env 70ms.
si vous venez de définir NSMergePolicy (par exemple): NSOverwriteMergePolicy, vous aurez Dernière-En-Modifications: seul le dernier objet ajouter un lien, parce que chaque contexte sont instantané de la mémoire de stockage permanent. Ainsi, chaque instantané sont créés au moment de la routine de la création de l'objet. 70ms de traitement de décalage dans le temps cause que les informations de coreObject est trop vieux, lorsque vous l'enregistrez. En d'autres termes, vous aurez seulement un lien enregistré ou de la Fusion d'erreur. Bien sûr, vous pouvez vous abonner sur NSManagedObjectContextObjectsDidchangenotification mais dans ce cas, vous devrez N! souscrit relations ou vous pouvez vous abonner à la star de la manière la croix contexte principal dans le thread principal, mais parfois, il ne fonctionne pas (je suis en utilisant MagicalRecord, Copyright 2011 Magique Panda Software LLC.).
Ma solution est de re-lire la critique coreObject juste avant de l'enregistrer en tant que bien que l'utilisation appropriée de la politique de fusion:
Dans ce cas, le risque est minime.