gpt4 book ai didi

objective-c - 第二次使用时 makeKeyAndOrderFront 崩溃...(ARC?)

转载 作者:行者123 更新时间:2023-12-03 17:10:54 25 4
gpt4 key购买 nike

问题...

我之前使用过 MainMenu.xib 中的这段代码来管理窗口:

--

if([olt_MainMenu_WINDOW isVisible]){
[olt_MainMenu_WINDOW setReleasedWhenClosed:NO];
[olt_MainMenu_WINDOW close];
}

...然后

if(olt_DoSomething_WINDOW == nil)
if(![[NSBundle mainBundle] loadNibNamed:@"DoSomething" owner:self topLevelObjects:nil])
NSBeep();
if(olt_DoSomething_WINDOW != nil)
[olt_DoSomething_WINDOW makeKeyAndOrderFront:nil];

--

...然后返回到 MainMenu.xib 中的窗口:

--

if([olt_DoSomething_WINDOW isVisible]){
[olt_DoSomething_WINDOW setReleasedWhenClosed:NO];
[olt_DoSomething_WINDOW close];
}

...然后

if(olt_MainMenu_WINDOW == nil)
if(![[NSBundle mainBundle] loadNibNamed:@"MainMenu" owner:self topLevelObjects:nil])
NSBeep();
if(olt_MainMenu_WINDOW != nil)
[olt_MainMenu_WINDOW makeKeyAndOrderFront:nil];

--

但是如果我再次尝试 makeKeyAndOrderFront DoSomething 窗口,它会因 exc_bad_access (code=1 ...

我可以多次 makeKeyAndOrderFront MainMenu,但不能是其他任何。我错过了什么?

是的,在窗口的属性检查器中未选择“关闭时释放”。这是我第一次在 ARC 中使用它,这可能与此有关吗?

最佳答案

基于reference for loadNibNamed:owner:topLevelObjects: ,我猜测 doSomething Nib 中的 NSWindow 顶级对象的 IBOutlet 较弱。由于您没有传递诸如 &myArray 之类的内容,而是使用 topLevelObjects:nil,因此很明显“有必要通过使用 IBOutlet 来保持对它们的强引用”。

Discussion

Unlike legacy methods, the objects [topLevelObjects-ed.] adhere to the standard cocoa memory management rules; it is necessary to keep a strong reference to them by using IBOutlets or holding a reference to the array to prevent the nib contents from being deallocated.

Outlets to top-level objects should be strong references to demonstrate ownership and prevent deallocation.

您需要:

@property(强)IBOutlet NSWindow *olt_DoSomething_WINDOW;

...或者以其他方式保留对窗口的强引用。 IBOutlets 通常很弱,因为它们是由其 super View 保留的 View 元素,您不需要 Controller 保留它们,但这里的 NSWindow 没有保留所有者,除非您显式创建一个。因此,在这种情况下,您实际上需要一个强大的 IBOutlet。

关于objective-c - 第二次使用时 makeKeyAndOrderFront 崩溃...(ARC?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29885409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com