J'ai une application iPad où je suis en utilisant le NSUndoManager avec Core Data. Les choses fonctionnent généralement bien, sauf qu'il y a un bug semi-reproductible quand je défais/refais plusieurs fois. Je travaille seulement sur le thread principal (au moins, j'ai désactivé MagicalRecords d'utiliser un NSManagedObject sur un thread secondaire.) Le problème se produit toujours si j'essaye d'annuler/refaire une insertion d'un NSManagedObject au contexteCoreData jette exception avec NSUndoManager
Ainsi J'ai quelque chose comme ceci:
if (!self.undoManager.isUndoing && !self.undoManager.isRedoing)
{
[self.undoManager undo];
}
else
{
NSLog(@"gotcha!");
}
Et après plusieurs fois, je reçois l'exception suivante Il arrive sur un fil secondaire, ce qui me fait penser à Core Data fait quelque chose en arrière-plan
CoreData: error: Serious application error. Exception was caught during Core Data
change processing. This is usually a bug within an observer of
NSManagedObjectContextObjectsDidChangeNotification. _registerUndoObject:: NSUndoManager
0xcea2d60 is in invalid state, must begin a group before registering undo
with userInfo (null) 2012-07-25 15:42:26.850 TT[3972:3c07] *** Terminating app due to
uncaught exception 'NSInternalInconsistencyException', reason: '_registerUndoObject::
NSUndoManager 0xcea2d60 is in invalid state, must begin a group before registering undo
..
Parfois, je suis aussi gettin g EXEC_BAD_ACCESS, d'autres fois juste l'exception ci-dessus.
Une idée de ce qui pourrait causer cela?
Edit: la situation clarifiée pour mundi (voir commentaires)
Vous devez donner un contexte plus que juste l'appel à 'undo'. – Mundi
Lorsque l'annulation se produit, je reconstruis l'interface utilisateur, ce qui est une opération assez coûteuse (reconstruction d'un grand nombre d'UIViews personnalisés à partir des NSManagedObjects d'origine). Cela sera finalement optimisé. Il serait difficile de fournir un code découpé ici (c'est un gros projet) - qu'est-ce qui vous serait utile? –
Qu'est-ce que vous perdez? – Mundi