2013-08-31 70 views
0

當我雙擊文件時,應用程序已經運行,我的應用程序可以打開它應該使用的文件類型。但是,當應用程序尚未運行,我雙擊文件,應用程序啓動,但它不會打開文件。爲什麼會這樣?當我雙擊它並且應用程序沒有運行時,我的應用程序沒有打開文件

應用程序委託實現方法:

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

回答

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

+2

你能避免這個技巧,如果你在applicationDidFinishLaunching中執行應用程序初始化:但是在之前調用的applicationWillFinishLaunching: –

+0

中,我會嘗試一下。謝謝 – Ibolit

相關問題