NSUndoManager 的 removeAllActions 方法失败问题,[self.undoManager undo]崩溃

NSUndoManager 被用做撤消和反撤消功能,具体的用法百度和google就好了。这里主要对我项目中的出现的

[self.undoManagerundo]; 崩溃问题做一个记录。


出现的问题是这样的,当第一次进入A界面时,A界面的地址为0x123,这时我做了2步操作,可以进行两次[self.undoManager undo]。问题从这里产生,如果退出界面前,我没有清掉撤消栈的内容,撤消栈的内容是一直保存在app里面的。

当我第二次进入A界面时,A界面的地址为0x222,如果此时我进行一次[self.undoManager undo]操作,则会崩溃,崩溃内容显示为 [0x123 retain], 但此时0x123是上一个界面的地址,已经被释放掉了,所以对野指针操作崩溃产生。


因此,需要在合适的地方使用

[self.undoManager removeAllActionsWithTarget:self] 或  [self.undoManager removeAllActions] 来清除撤消栈。

刚开始的做法是在dealloc方法里面使用这两个清除方法,但发现程序依然同样的崩溃错误。

经过断点后发现:dealloc方法里的self.undoManager地址为0x00,因此是没有调用到清除方法的。

如图所示,






猜你喜欢

转载自blog.csdn.net/gdutxzy/article/details/52781715
今日推荐