0

我有一个document based application,当应用程序关闭时,我需要在网络浏览器中加载一个 url。它工作正常,除了NSDocument可以加载此页面之前关闭。

我需要它等待200 ms然后关闭文档。

我找到了,NSTerminateLater但它是指应用程序,而不是文档。我怎样才能做到这一点?

这就是我现在所拥有的:

- (id)init
{
self = [super init];
if (self) {
    _statssent = NO;

    // Observe NSApplication close notification
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(_sendstats)
                                                 name:NSApplicationWillTerminateNotification
                                               object:nil];
}
return self;
}


- (void)_sendstats
{
if (!_statssent)
{
    _statssent = YES;

    if (hasuploaded == 1)
    {
            [self updatestatsUploads:0 progloads:1];
    }

 }
}

 - (void)close
{
[self _sendstats];

[super close];
}
4

1 回答 1

2

就在关闭文档之前,您可以发出通知,您的应用程序委托可以注册为观察者。

当您的应用程序委托收到通知(可能会传达您需要打开的 URL)时,可以调用您的应用程序委托上的方法来为您打开 URL。

您可以通过使用NSNotificationCenter每个 Cocoa 应用程序附带的实例来做到这一点(更准确地说,它是一个单例)。您的文档会发出如下通知:

NSDictionary *myUserInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"http://www.apple.com", @"MyURL", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotificationName" object:self userInfo:myUserInfo];

在您的应用程序委托中,可能在您的-awakeFromNib方法中,您将使用如下内容:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myURLOpenerMethod:) name:@"MyNotificationName" object:nil];

在您的应用程序委托的某处,您可以像这样定义 URL 打开器:

- (void)myURLOpenerMethod:(NSNotification *)notification
{
    NSString *urlString = [[notification userInfo] objectForKey:@"MyURL"];
    // use 'urlString' to open your URL here
}

不想尝试使用延迟来获得您想要的东西。我向你保证:那是疯狂所在。

于 2013-03-01T20:34:49.630 回答