gpt4 book ai didi

objective-c - 不显示 block 内的模态 NSAlert

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:50 24 4
gpt4 key购买 nike

在我的基于文档的应用程序中,我重写了方法 openDocument: 在我的 NSDocumentcontroller 子类中,以便我可以显示我自己的 openPanel。我将选择的 URL 传递给方法 openDocumentWithContentsOfURL:display:completionHandler:。我使用此代码进行调用:

[self openDocumentWithContentsOfURL:[chosenFiles objectAtIndex:i] display:YES completionHandler:^(NSDocument *document, BOOL documentWasAlreadyOpen, NSError *error) {

if (document == nil)
{
NSAlert* alert = [NSAlert alertWithError:error];
[alert runModal];
}

}];

因此,如果返回 nil 作为对文档的引用,我想显示传递的错误。问题是,在我按下打开面板中的“打开”按钮后,程序就“卡住”了。然后我需要使用 Xcode 中的“停止”按钮手动停止程序。但是,没有出现旋转的沙滩球。如果我注释行“[alert runModal]”,程序不会再卡住,但当然不会显示警报。

现在奇怪的是:代码有时 有效。如果我从 Xcode 切换到我的浏览器并返回并再次运行该程序,它有时会完美运行并显示错误。一段时间后,它再次停止工作。它是不可预测的,但大多数时候它不起作用。

对我来说,这一切听起来像是一种竞争条件。肯定跟block有关系吧?但是我做错了什么?

最佳答案

将我的评论转换为答案:

在主线程上运行模型。

[alert performSelectorOnMainThread:@selector(runModal) withObject:nil waitUntilDone:NO]; 

我认为 runModel 需要在主线程上调用,因为它是 AppKit 框架的一部分,并且它本质上是触发 UI 图形。我相信所有对 AppKit 框架或任何操作图形的方法的调用都需要在主线程上进行。

关于objective-c - 不显示 block 内的模态 NSAlert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12693752/

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