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,因此是没有调用到清除方法的。

如图所示,






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值