【问题标题】:How to open a NSAlert in awakeFromNib? (taking care of the window animation)如何在 awakeFromNib 中打开 NSAlert? (照顾窗口动画)
【发布时间】:2016-01-04 10:17:08
【问题描述】:

我遇到了在 -awakeFromNib 方法中创建的 NSAlert 的问题。

xib 窗口动画需要一些时间,并且警报过早地被创建并添加到应用程序中(因此它与窗口分离)。

如果我延迟方法调用一切正常,但我想这不是实现它的正确方法。我应该如何编写代码?

- (void) awakeFromNib
{
       ...
      [self performSelector:@selector(showAlertMethod) withObject:nil afterDelay:0.01];
}

【问题讨论】:

    标签: objective-c macos cocoa


    【解决方案1】:

    为确保在主线程完成其当前任务时执行该方法,您可以将方法调用分派到主队列:

    dispatch_async(dispatch_get_main_queue(), ^ {
        [self showAlertMethod];
    });
    

    【讨论】:

    • @Patrick:所有 UI 都应该从主队列处理。这里的情况也是如此。
    • 有点晚了,但我想问一下... 为什么 awakeFromNib 不在主队列上运行?它不应该是一种配置方法(包括例如颜色)吗?刚刚发生在我身上,我从一个视图控制器 (viewDidLoad) 上的一个 nib 初始化了一个视图,它应该在主队列上运行,完美。我可以在那里配置它。但是如果我继承并覆盖awakeFromNib,它不会更新UI,所以我不得不使用GCD。我认为至少awakeFromNib 会在与实例化它的对象相同的队列中运行,但事实并非如此。很奇怪。
    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2022-01-22
    • 2023-02-26
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多