当我双击它并且应用程序没有运行时,我的应用程序没有打开文件

问题描述:

当我双击文件时,应用程序已经运行,我的应用程序可以打开它应该使用的文件类型。但是,当应用程序尚未运行,我双击文件,应用程序启动,但它不会打开文件。为什么会这样?当我双击它并且应用程序没有运行时,我的应用程序没有打开文件

应用程序委托实现方法:

 
-(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; 
} 

对于那些谁可能陷入同样的​​陷阱:

事实证明,上述方法获得早于所谓的“-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]; 
    } 
} 

+2

你能避免这个技巧,如果你在applicationDidFinishLaunching中执行应用程序初始化:但是在之前调用的applicationWillFinishLaunching: –

+0

中,我会尝试一下。谢谢 – Ibolit