Core Data で NSUndoManager を使用している iPad アプリがあります。数回元に戻す/やり直すと、ある程度再現可能なバグがあることを除いて、通常はうまく機能します。私はメインスレッドでのみ作業しています (少なくとも、MagicalRecords がセカンダリスレッドで NSManagedObject を使用するのを無効にしました。コンテキストへの NSManagedObject の挿入を元に戻したりやり直したりしようとすると、常に問題が発生します。
だから私はこのようなものを持っています:
if (!self.undoManager.isUndoing && !self.undoManager.isRedoing)
{
[self.undoManager undo];
}
else
{
NSLog(@"gotcha!");
}
そして数回後、次の例外が発生します。これはセカンダリ スレッドで発生するため、Core Data がバックグラウンドで何かを実行していると思われます。
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
時々私はEXEC_BAD_ACCESSも取得していますが、それ以外の場合は上記の例外だけです。
何がこれを引き起こしているのでしょうか?
編集:ムンディの状況を明確化(コメントを参照)