2012-04-16 78 views
3

我想在雙擊文件時用我的應用程序打開一個文件。我已經註冊了應用程序的文件類型,如果我將一個文件放到應用程序圖標上,application: openFile:方法可以正常工作。它在蘋果文檔中說,當用戶雙擊一個文件時,這個方法也應該工作。通過在objective-c中雙擊打開文件

我看到的是,當文件通過雙擊打開時,應用程序將激活,但Safari將打開文件(試圖打開.webloc文件)。但application: openFile:不會被調用的方法:(

這是我如何設置它在Xcode: file type reg

編輯:

我已經設置了.webloc打開爲非標準我。應用程序還可以右鍵單擊「打開方式」>「我的應用」不工作

編輯2: 如果我重命名文件擴展名爲.mp3或任何其他我的應用程序提示將通過雙擊打開該文件!奇怪...

回答

0

在Xcode中,使用「Mac OS X :: Cocoa Application」模板創建一個新項目。然後執行

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError 
{ static NSString *content = @"Empty File"; 
    return [NSData dataWithBytes: [content UTF8String] 
         length: 1 + strlen ([content UTF8String])]; } 

然後,您將有一個工作示例來與您的項目進行比較。

+0

我認爲你的問題有點不對。或者我不明白你的答案:(在蘋果文檔中它說:「創建並返回一個包含文檔內容的數據對象,格式化爲指定的類型。」對於'dataOfType:error:'。我想要的是一種打開用戶雙擊的文件的方法 – Silicone 2012-04-16 19:08:56

+0

沒有抱歉,Xcode項目的例子允許你創建一個新文檔,保存文檔,然後雙擊它打開它。需要修改的模板代碼以保存文件(在我的答案中的方法之後的方法也需要更改爲返回「YES」。)雙擊工作;也許它可以幫助您解決原始問題。示例代碼會創建一個新的文檔類型'mydoc',並且您打開一個現有的文檔類型'webloc' - 因此示例代碼可能無濟於事。 – GoZoner 2012-04-16 19:26:27

+0

我在屬性列表編輯器中創建了「我自己的」.webloc文件,但剛剛打開的Chrome瀏覽器,似乎只有當我使用「。 webloc「擴展Safari將打開。如果我將擴展名更改爲「.mp3」或其他任何其他文件都將按預期工作,則會調用'application:openFile:':S – Silicone 2012-04-16 19:46:45

1

雙擊某個文件不會在其中打開每個可以處理該文件類型的應用程序(您能想象當雙擊JPEG時會發生什麼?) - 雙擊使用該文件類型的默認應用程序。在這種情況下,Safari是webloc文件的默認讀取器。您需要將其更改爲您的應用程序(您可以從「獲取信息」窗口執行此操作),如果您希望它是所調用的應用程序。

+0

我已經設置了文件,我的默認應用程序打開。另外,當我選擇「打開方式」>「我的應用程序」,它不起作用 – Silicone 2012-04-16 18:31:51

0

有可能有幾個應用程序都知道如何打開相同類型的文件。如果您想讓應用程序處理.webloc文件,請爲該類型的文件獲取信息。然後在信息窗口的「打開方式:」部分的彈出式菜單中選擇您的應用程序。如果你想使用你的應用程序來處理所有這些文件,請點擊「更改所有...」按鈕。

+0

我的應用程序被設置爲打開這種文件的默認應用程序。 「打開」也不起作用。 – Silicone 2012-04-16 18:39:07

+0

你是否也執行'-application:openFiles:'?你是否正在按照文檔中的說明在你的實現中調用'-replyToOpenOrPrint:'? – Caleb 2012-04-16 18:43:57

+0

是的,'application:openFiles:'也在我的代碼中。在應用程序的圖標上放置多個文件時也可以正常工作。我嘗試過'replyToOpenOrPrint:'但沒有任何區別。'application:openFile(s):'中的代碼不會被調用 – Silicone 2012-04-16 18:47:33

1

由於我自己剛剛經歷了類似的問題,我會添加對我有用的東西。我發現.webloc文件永遠不會調用-application:openFile:,相反,如果您只需雙擊.webloc並讓應用程序處理它,則必須執行幾件事才能使您的應用成爲URL的默認角色處理程序。

對這個職位所選擇的答案描述瞭解決我的問題的過程: How do you set your Cocoa application as the default web browser?