为什么关闭 NSWindow 后重新打开它时会收到 EXC_BAD_ACCESS?

Ste*_*555 7 macos xcode exc-bad-access objective-c nswindow

我在双击事件后调用以下代码,以便在鼠标位置打开一个小窗口。它工作正常,并且每次都会重新出现在新位置,但如果我先手动关闭窗口,则会收到 EXC_BAD_ACCESS 错误。

win =  [[NSWindow alloc] initWithContentRect:frame
                                 styleMask:(NSTitledWindowMask | NSClosableWindowMask)
                                 backing: NSBackingStoreBuffered
                                 defer:false];
        [win makeKeyAndOrderFront:NSApp];
Run Code Online (Sandbox Code Playgroud)

并且窗口在调用上面代码的视图的接口中声明

 @interface myView : NSView
{
    NSWindow *win;
}
Run Code Online (Sandbox Code Playgroud)

如果相关的话,我正在使用 ARC,并且在调试器中我可以看到win在关闭之后以及尝试重新创建它之前它不是 nil,尽管它的 contentView 已变为 nil。

感谢您提供任何线索。

Gal*_*105 2

我在 Swift 中也遇到了同样的问题。为了解决这个问题,根据 Vin 的评论,我使用了window.isReleasedWhenClosed = false. 这可以防止窗口在关闭时被释放,从而允许您重新打开它而不会出现任何错误。

https://developer.apple.com/documentation/appkit/nswindow/1419062-isreleasedwhenclose