Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos NSTextView未解除锁定';d直到移动鼠标(清除撤消堆栈?)_Macos_Cocoa_Nstextview - Fatal编程技术网

Macos NSTextView未解除锁定';d直到移动鼠标(清除撤消堆栈?)

Macos NSTextView未解除锁定';d直到移动鼠标(清除撤消堆栈?),macos,cocoa,nstextview,Macos,Cocoa,Nstextview,我有一个NSTextView,我在窗口的内容视图中以编程方式创建它。在某些情况下,我需要以编程方式终止编辑并销毁NSTextView。当我这样做时(通过将first responder设置为nil,从SuperView中移除并释放指针),NSTextView上的dealloc不会被调用-直到我将鼠标移到窗口内容视图之外。这就好像窗口正在缓存对NSTextView的引用,并且只有在它确定我不再与窗口交互时才释放它。这不会是一个问题,除非这样会弄乱相关textContainer的撤消分组 有点晦涩—

我有一个NSTextView,我在窗口的内容视图中以编程方式创建它。在某些情况下,我需要以编程方式终止编辑并销毁NSTextView。当我这样做时(通过将first responder设置为nil,从SuperView中移除并释放指针),NSTextView上的dealloc不会被调用-直到我将鼠标移到窗口内容视图之外。这就好像窗口正在缓存对NSTextView的引用,并且只有在它确定我不再与窗口交互时才释放它。这不会是一个问题,除非这样会弄乱相关textContainer的撤消分组

有点晦涩——但如果有人知道这一点,我很想听听你的意见


谢谢

我仍然不知道为什么NSTextView解除分配会被推迟,但事实证明,这是一个骗局。我的撤销堆栈被破坏的原因是因为我在textDidChange回调中破坏了我的NSTextView(尽管使用了retain/AUTORELASE来延迟实际的解除锁定)

如果我从textDidChange中通过performSelector:withObject:afterDelay调用destroyTextView:code来延迟我的destroyTextView:code,那么一切都很好(使用undo堆栈)


有道理,现在我已经找到了原因……不是吗?

你可以使用仪器来找出是什么保留了视图。只要在启用僵尸的情况下将其覆盖,然后等待崩溃。这可能会帮你找到问题所在。好主意就这么做了,我的NSTextView最后一件事就是NSAutomaticFocusRing——不管是什么。不管怎样-给了我一个开始寻找的地方。Thanksry
setFocusRingType:NSFocusRingTypeNone
,并再次检查文本视图是否实际放弃了first responder状态(
makeFirstResponder:nil
应返回
YES
),因为只有first responder应该有一个焦点环。