2009-12-15 6 views
0

J'ai un modèle de données construit dans les données de base pour l'iPhone. J'ai aussi un NSUndoManager qui travaille pour ce modèle. Le problème est que j'ai certaines propriétés sur une entité que je ne veux pas affecter lors d'une annulation et d'autres propriétés que je veux annuler. Est-ce possible sans changer radicalement les choses? Si oui, quelle est la meilleure façon de le faire.iPhone Core Data: Persistance de la propriété pendant l'annulation

Répondre

1

Après un peu de lecture ...

Les méthodes NSUndoManager:

- (void)disableUndoRegistration 
- (void)enableUndoRegistration 

fonctionne sous réserve que l'on appelle directement après la méthode NSManagedObjectContext

- (void)processPendingChanges 

.

Par exemple, vous pouvez ajouter la méthode suivante sur un objet réussi à mettre la météo ou non une modification d'une propriété devrait être ajouté à la pile undo:

- (void)setColor:(UIColor *)aColor undo:(BOOL)shouldUndo{ 
    if (shouldUndo) 
     [self setColor:aColor]; 
    else{ 
     NSManagedObjectContext *moc = self.managedObjectContext; 

     [moc processPendingChanges];     //Disable undo 
     [moc.undoManager disableUndoRegistration]; 

     [self setColor:aColor];      //Preform change 

     [moc processPendingChanges];     //Enable undo 
     [moc.undoManager enableUndoRegistration]; 
    } 
} 

Notez que si vous avez un tas de changements que vous ne voulez pas ajouter à la pile d'annulation, ce n'est peut-être pas la façon la plus efficace de le faire.

+1

Généralement, j'ai seulement besoin du second -processPendingChanges lors de la désactivation de l'enregistrement d'annulation. –

Questions connexes