我有一个document based application
,当应用程序关闭时,我需要在网络浏览器中加载一个网址。它工作正常,除了在加载此页面之前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];
}
答案 0 :(得分:2)
在关闭文档之前,您可以发出一个通知,您的申请代表可以将其注册为观察员。
当您的应用程序委托收到通知(可能传达您需要打开的URL)时,可以调用应用程序委托上的方法为您打开URL。
您可以通过使用每个Cocoa应用程序附带的NSNotificationCenter
实例来实现这一点(更确切地说,它是一个单例)。您的文档会发出如下通知:
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
}
你不想要尝试使用延迟来获得你想要的东西。我向你保证:疯狂就是这样。