当我双击文件时,我的应用程序可以打开它应该使用的文件类型,并且应用程序已在运行。但是,当应用程序尚未运行并且我双击文件时,应用程序启动,但它不会打开该文件。为什么会这样?
app委托实现方法:
-(void) application:(NSApplication *)sender openFiles:(NSArray *)filenames {
for (NSString *name in filenames) {
NSLog(@"Openning files");
[self.topController addFileAtPath:name];
}
}
-(BOOL) application:(NSApplication *)sender openFile:(NSString *)filename {
NSLog(@"Openning file_");
[self.topController addFileAtPath:filename];
return YES;
}
答案 0 :(得分:1)
对于那些可能陷入同一陷阱的人:
事实证明,上面的方法比“-applicationDidFinishLaunching:”更早被调用,其中我正在进行所有应用程序初始化。我最终创建了一个“活着”标志(以显示我的应用程序是否已被输入),并将所有初始化逻辑放在一个单独的方法中。然后,在我的“... finishedLaunching”,“openFiles”和“openFile”中,我检查该标志是打开还是关闭,并相应地调用应用程序初始化方法:
@implementation DTVAppDelegate
BOOL alive = NO;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
if (!alive) {
[self startApp];
}
}
- (void) startApp {
// init logic
alive = YES;
}
-(void) application:(NSApplication *)sender openFiles:(NSArray *)filenames {
if (!alive) {
[self startApp];
}
for (NSString *name in filenames) {
NSLog(@"Openning files");
[self.topController addFileAtPath:name];
}
}