58 votes

iPhone CoreData: Comment puis-je suivre/observer tous les changements à l'intérieur d'un sous-graphe?

J'ai un NSManagedObjectContext dans lequel j'ai un certain nombre de sous-classes de NSManagedObjects ce qui fait que certains sont des conteneurs pour les autres. Ce que je voudrais faire est de regarder un objet de plus haut niveau afin d'être informé de tout changement à l'une de ses propriétés, des associations, ou les propriétés de l'association/de l'un quelconque des objets qu'il contient.

En utilisant le cadre "hasChanges' ne me donne pas assez de granularité. Les objets isUpdated méthode ne s'applique qu'à l'objet donné (et pas quelque chose dans ses associations). Est-il une pratique (peut-être, KVO) a été je peux observer les changements dans un contexte qui sont limitées à un sous-graphe?

129voto

Brad Larson Points 122629

Vous voulez écouter de la NSManagedObjectContextObjectsDidChangeNotification de ramasser toutes les modifications apportées à votre modèle de données. Cela peut être fait en utilisant le code suivant:

[[NSNotificationCenter defaultCenter] 
      addObserver:self 
         selector:@selector(handleDataModelChange:) 
             name:NSManagedObjectContextObjectsDidChangeNotification 
           object:myManagedObjectContext];

qui va déclencher -handleDataModelChange: sur tout changement à l' myManagedObjectContext contexte.

Votre -handleModelDataChange: méthode ressemblerait à quelque chose comme ceci:

- (void)handleDataModelChange:(NSNotification *)note
{
    NSSet *updatedObjects = [[note userInfo] objectForKey:NSUpdatedObjectsKey];
    NSSet *deletedObjects = [[note userInfo] objectForKey:NSDeletedObjectsKey];
    NSSet *insertedObjects = [[note userInfo] objectForKey:NSInsertedObjectsKey];

    // Do something in response to this
}

Comme vous pouvez le voir, la notification contient des informations sur les objets gérés ont été mises à jour, supprimées, et inséré. À partir de cette information, vous devriez être en mesure d'agir en réponse à votre modèle de données change.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X