NSWindow在关闭和重新打开后崩溃。

3
我已经创建了一个NSWindow。
self.storeWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(100, 100, 800, 660) styleMask:NSWindowStyleMaskResizable|NSWindowListOrderedFrontToBack|NSWindowStyleMaskClosable backing:NSBackingStoreBuffered defer:false];
                             [self.storeWindow setDelegate:self];

这段代码可以正常打开和关闭。然而,如果我再次调用它甚至检查它是否为nil,就会出现EXC_BAD_ACCESS错误。

我在头文件中将其声明为字符串属性。

@property (strong,nonatomic) NSWindow *storeWindow;

      if (self.storeWindow.contentView == nil) {
                            self.storeWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(100, 100, 800, 660) styleMask:NSWindowStyleMaskResizable|NSWindowListOrderedFrontToBack|NSWindowStyleMaskClosable backing:NSBackingStoreBuffered defer:false];
                             [self.storeWindow setDelegate:self];
                        }
                        [self.storeWindow setBackgroundColor:[NSColor whiteColor]];
                        self.store = [[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 850, 640)];
                        [self.store loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:json[@"url"]]]];
                        [self.storeWindow.contentView addSubview:self.store];
                        [self.storeWindow makeKeyAndOrderFront:self.window];

有什么想法吗?

窗口是否由窗口控制器拥有?窗口的releasedWhenClosed属性是否已设置? - red_menace
它不是由控制对象拥有的。属性releasedWhenClosed只是一个getter,它当前读取(lldb) po self.storeWindow.isReleasedWhenClosed <object returned empty description> - mKane
该属性还可以被设置以改变默认行为,即在窗口关闭时释放它。 - red_menace
你能否发一段代码片段来进行设置吗?我尝试过了,但它不让我这么做。根据文档,默认设置为true。 - mKane
该属性是releasedWhenClosed,因此应该类似于self.storeWindow setReleasedWhenClosed:NO - red_menace
你是一个了不起的人。谢谢。 - mKane
1个回答

4

NSWindow的 releasedWhenClosed 属性可以被设置以改变默认行为,即当窗口关闭时释放它(除非它是由窗口控制器拥有)。该属性可以在Interface Editor的Attributes Inspector中进行设置,也可以通过编程方式进行设置,例如:

[myWindow setReleasedWhenClosed:NO];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接