CoreData
Entité "a" a un un-à-plusieurs relation à une collection d' CoreData
des Entrées "B", à l'aide d'une Cascade de la suppression de la règle.
Dans un iCloud
de l'environnement, alors que l'appareil photo 1 montre une vue de détail de l'un des "B" des entrées de l'appareil 2 supprime la "Une" de l'entrée.
Lorsque l' NSPersistentStoreDidImportUbiquitousContentChangesNotification
de notification est reçue dans le dispositif 1, son Délégué d'Application appels mergeChangesFromContextDidSaveNotification
puis l'émission d'une notification interne qui est capturée par le point de vue du contrôleur indiquant les détails de l'entrée "B" (le code utilise performBlock
où il le devrait).
Cependant, bien que l'entrée "A" est en effet annulé lorsque la vue de détail contrôleur reçoit la notification interne, l'entrée "B" existe toujours valide CoreData
objet. Il semble que la Cascade de la règle n'a pas complété son fonctionnement. Par conséquent, le point de vue du contrôleur dans le dispositif 1 n'est pas au courant de la supprimer, ce qui peut conduire à des résultats inattendus.
mergeChangesFromContextDidSaveNotification
semble revenir prématurément, lorsque la base de données a été fusionnée, mais la Cascade de la règle n'est pas encore terminée.
J'ai essayé d'actualiser l'entrée "B" lors de la notification arrive, alors temporairement le réglage de l' stalenessInterval
de la gestion du contexte de l'objet à zéro si un objet mis en cache ne sera pas utilisé, mais j'ai toujours une entrée valide "B" à partir de la boutique.
Vérifier l' null
l'entrée "A" à ce stade, n'est pas une option, parce que la situation est un peu plus complexe que ce que j'ai décrit ici et un nul d'entrée "A" peut être valable dans certains cas.
J'ai essayé d'introduire un retard après fusion, les changements et avant l'envoi de la notification à la vue des contrôleurs. J'ai découvert qu'un délai de 2 secondes n'aide pas, mais un délai de 10 secondes œuvres.
Mais je ne veux pas compter sur ce retard. C'est un environnement de test sans beaucoup de données, et je ne sais pas ce qui va se passer dans un environnement de production. En s'appuyant sur une expérimentation de retard ne semble pas la bonne chose à faire.
Est-il une bonne chose? Ou suis-je en train de faire quelque chose de mal pour commencer?