首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查NSAlert当前是否出现

检查NSAlert当前是否出现
EN

Stack Overflow用户
提问于 2016-03-22 14:38:13
回答 2查看 1.4K关注 0票数 3

我使用NSAlert在我的应用程序的主屏幕上显示错误信息。基本上,NSAlert是我的主视图控制器的一个属性。

代码语言:javascript
复制
class ViewController: NSViewController {

    var alert: NSAlert?

    ...

}

当我收到一些通知时,我会显示一些消息。

代码语言:javascript
复制
func operationDidFail(notification: NSNotification)
{
    dispatch_async(dispatch_get_main_queue(), {

        self.alert = NSAlert()
        self.alert.messageText = "Operation failed"
        alert.runModal();
    })
}

现在,如果我收到几个通知,每个通知都会显示警报。我的意思是,它出现在第一条消息,我点击“确定”,它消失,然后再次出现与第二条消息等.这是正常的行为。

我想要达到的是避免这一系列的错误信息。其实我只关心第一个。是否有一种方法可以知道我的警报视图是否正在显示?就像iOS的alert.isVisible UIAlertView一样吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-22 15:11:06

从您的代码中,我怀疑通知是在后台线程中触发的。在这种情况下,任何当前可见的警报检查都不会有帮助。在第一个块完成之前,您的代码不会开始后续的块执行,因为runModal方法将阻塞,在模态模式下运行NSRunLoop

要解决您的问题,您可以引入原子bool属性,并在dispatch_async之前检查它。

目标-C解决方案:

代码语言:javascript
复制
- (void)operationDidFail:(NSNotification *)note {
    if (!self.alertDispatched) {
        self.alertDispatched = YES;
        dispatch_async(dispatch_get_main_queue(), ^{
            self.alert = [NSAlert new];
            self.alert.messageText = @"Operation failed";
            [self.alert runModal];
            self.alertDispatched = NO;
        });
    }
}

使用Swift的相同代码:

代码语言:javascript
复制
func operationDidFail(notification: NSNotification)
{
    if !self.alertDispatched {
        self.alertDispatched = true
        dispatch_async(dispatch_get_main_queue(), {
            self.alert = NSAlert()
            self.alert.messageText = "Operation failed"
            self.alert.runModal();
            self.alertDispatched = false
        })
    }
}
票数 5
EN

Stack Overflow用户

发布于 2016-03-22 15:07:12

而不是运行模式,您可以尝试

代码语言:javascript
复制
- beginSheetModalForWindow:completionHandler:

来源:ref/occ/instm/NSAlert/beginSheetModalForWindow:completionHandler

在完成处理程序中,将警报属性设置为零。并且只有当警报属性为零时才显示警报(这将是在每一次解除警报之后)。编辑:我看不出文档中有任何关于你要找的标志的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36157382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档