ios - NSUndoManager removeAllActionsWithTarget 崩溃
<p><p>我有一些简短的 iOS Objective-C 示例代码(从一个更大的项目中简化)导致 NSUndoManager 崩溃,我无法解释。</p>
<p>也就是说,当一个对象只被 NSUndoManager 释放时(因为它超出了撤消的级别),并且根据 <a href="https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/UndoArchitecture/Articles/CleaningUndoStack.html" rel="noreferrer noopener nofollow">docs</a>调用 <code>removeAllActionsWithTarget:self</code>,我得到一个 EXC_BAD_ACCESS。</p>
<pre><code>// SimpleViewController.m
@interface ViewController ()
@property (nonatomic, strong) NSUndoManager *undoManager;
@end
@implementation ViewController
@synthesize undoManager;
// called from a simple button
- (IBAction)doItTapped:(id)sender
{
CoolObject *object = ;
object.undoManager = self.undoManager;
// according to docs, object will be retained by NSUndoManager here
// but target will not (which should be okay)
;
}
- (void)viewDidLoad
{
;
self.undoManager = ;
self.undoManager.levelsOfUndo = 3;
}
</code></pre>
<p>和</p>
<pre><code>// CoolObject.m
@implementation CoolObject
- (void)dealloc
{
;
}
@end
</code></pre>
<p>在第四次点击按钮后 (<code>levelsOfUndo</code> + 1),它会崩溃。
如果我用 <a href="https://github.com/seanm/GCUndoManager" rel="noreferrer noopener nofollow">GCUndoManager</a> 交换 NSUndoManager ,没有崩溃。
在 iOS 10.2 sim 和设备中测试。</p>
<p>感谢您的任何想法!</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您可能会遇到此错误,因为 <code>self.undoManager</code> 在您使用它的时候没有保留。当对象已经被释放并且你尝试访问它时,你会得到错误的访问异常。</p>
<p>尝试从这里更改您的代码:</p>
<pre><code>CoolObject *object = ;
</code></pre>
<p>到这里:</p>
<pre><code>@interface ViewController (){
CoolObject *object;
}
@property (nonatomic, strong) NSUndoManager *undoManager;
@end
@implementation ViewController
- (IBAction)doItTapped:(id)sender
{
object = ;
object.undoManager = self.undoManager;
// according to docs, object will be retained by NSUndoManager here
// but target will not (which should be okay)
;
}
@end
</code></pre>
<p>希望这会有所帮助。</p></p>
<p style="font-size: 20px;">关于ios - NSUndoManager removeAllActionsWithTarget 崩溃,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/41602669/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/41602669/
</a>
</p>
页:
[1]