2013-10-29 44 views
1

我想打開一個文件,將其放在應用程序圖標上。 當我這樣做時,我的應用程序已打開,因此文件擴展名已定義好並與我的應用程序相關。 但application:openFile:函數永遠不會被調用。所以我無法打開我的應用程序中丟棄的文件。 我追溯到openFile:但從未去過。NSApplicationDelegate應用程序:openFile。永遠不會達到openFile:功能

我發現的所有答案只是添加在代表openFile:,這一切都沒有在我的情況下。

任何幫助將非常感激。提前致謝。

這是我的環境。

plist擴展了要打開的文件。我刪除文件時打開了我的應用程序。

我在應用程序的初始化beggining我的委託,

mydelegate = [[MyController alloc] init]; 

而且在委託,

在包括

@interface MyController : NSObject <NSApplicationDelegate> { 

@private 

    NSWindow *window; 
} 

@property (assign) IBOutlet NSWindow *window; 

-(id) init; 

-(BOOL) application: (NSApplication*)sharedApplication openFile:(NSString*) fileName; 

@end 

而在.m文件,

@implementation MyController 

@synthesize window; 


- (id)init{ 

    self = [super init]; 
    if (self) { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
      selector:@selector(applicationWillFinishLaunching:) 
      name:NSApplicationWillFinishLaunchingNotification object:nil]; 
    } 
    return self; 
} 

- (void) applicationWillFinishLaunching:(NSNotification *)aNotification{ 

    NSLog(@"applicationWillFinishLaunching"); 
} 

-(BOOL) application: (NSApplication*)sharedApplication openFile:(NSString*) fileName { 

    NSLog(@"openFile=%@", fileName); 
    return YES; 
} 

@end 

回答

0

Inc路得在你的方法這一行,你越來越文件路徑: -

//Include this line for calling your method 
[self application:[NSApplication sharedApplication]openFile:filename]; 
+0

'yourFilePath'從哪裏來? – trojanfoe

+0

您需要提及您的具體路徑 –

+0

但是,無論用戶在圖標上放置什麼,路徑肯定都是這樣,並且您在編譯時不會知道它? – trojanfoe

1

至少在上述規定,你沒有明確設置應用程序的委託代碼是MyController一個實例。你是否在任何地方設置代表?

緊隨[[MyController alloc] init],試試這個:

[[NSApplication sharedApplication] setDelegate: mydelegate];

不進行此連接,應用程序將不知道誰應該處理委派職責。

OR

處理拖放到Dock圖標是簡單地實現最常用的方法:

-(BOOL)application:(NSApplication *)sender openFile:(NSString *)path

爲AppDelegate類的一部分,這是由你自動生成Xcode當你開始一個項目。

相關問題