【发布时间】:2012-07-25 20:48:47
【问题描述】:
我有一个 iPad 应用程序,我在其中使用 NSUndoManager 和 Core Data。事情通常运作良好,除了当我多次撤消/重做时有一个半可重现的错误。我只在主线程上工作(至少,我已禁用 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,其他时候只是上述异常。
知道是什么原因造成的吗?
编辑:澄清了 Mundi 的情况(见 cmets)
【问题讨论】:
-
除了调用
undo之外,您还需要提供更多上下文。 -
当撤销发生时,我重建 UI,这是一个相当昂贵的操作(从原始 NSManagedObjects 重建大量自定义 UIView)。这最终将被优化。在这里提供一段代码会很困难(这是一个大项目)——什么对你有用?
-
我正在撤消 NSManagedObject 的插入。这似乎是最常发生崩溃的情况之一
标签: ios core-data nsundomanager