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

4

1 に答える 1

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

于 2013-08-31T16:45:24.963 に答える