我有一个iPad应用程序,我正在使用与核心数据NSUndoManager。事情通常很好,除了当我多次撤消/重做时有一个半可重现的错误。我只在主线程上工作(至少,我已禁用MagicalRecords在辅助线程上使用NSManagedObject。如果我尝试撤销/重做NSManagedObject到上下文的插入,问题总是会发生。CoreData抛出异常与NSUndoManager
我有这样的事情:
if (!self.undoManager.isUndoing && !self.undoManager.isRedoing)
{
[self.undoManager undo];
}
else
{
NSLog(@"gotcha!");
}
而且几次之后,我得到以下异常它发生在一个辅助线程,这让我觉得核心数据在后台做一些
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
。
有时候我也是开玩笑g EXEC_BAD_ACCESS,其他时候只是上面的例外。
任何想法可能会造成这种情况?
编辑:为澄清曼迪情况(见注释)
您需要给予更多的上下文,而不仅仅是对“撤销”的调用。 – Mundi 2012-07-25 20:54:21
当撤消发生时,我重建UI,这是一个非常昂贵的操作(从原始的NSManagedObjects重建大量的自定义UIViews)。这最终会被优化。在这里很难提供一段代码(这是一个大型项目) - 对你有用吗? – 2012-07-25 20:56:27
你在撤消什么? – Mundi 2012-07-25 22:02:33