2013-02-18 100 views
4

我的應用程序可以讀取使用「打開方式...」對話框打開的.txt文件。我實現了我的閱讀功能,在如果應用程序尚未打開,請打開「...」問題

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

方法兩者。

有趣的是,它似乎只適用於應用程序以前打開。如果我在Mail中打開一個.txt文件並選擇「打開」,那麼我的應用程序。我可以在控制檯看到,

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 

被調用。我還可以看到URL到正確的文件,該文件是在supposably

文件://本地主機/私營/無功/移動/應用/ F15C57D0-4F62-4979-943A-2D387488D59C /文檔/收件箱/ MyFile的。 txt

但是,當我嘗試打開文件時,我得到一個Cocoa錯誤,指出這些文件不存在。

如果我重複步驟(應用程序在後臺打開)比找到文件並立即生效。 這是爲什麼?

+0

您是否在'application:didFinishLaunchingWithOptions:'的選項字典中引用'openUrl:url'的URL或者由'UIApplicationLaunchOptionsURLKey'鍵指定的值? – 2013-02-18 20:38:22

+3

如果您的應用程序尚未運行,您將收到一個'application:didFinishLaunchingWithOptions:'消息,其中包含選項字典中的URL,然後您還將**接收到一個'application:openURL:sourceApplication:annotation:''信息。確保你沒有在第一種方法中刪除該文件,然後期望在第二種方法被調用時它仍然存在。 – 2013-02-18 21:02:22

+2

這可能是問題所在。我在'didFinishLaunchingWithOptions'和'application:openURL'之後沒有找到任何東西的時候刪除了這個文件。我現在只處理'application:openURL'中的文件,它似乎工作正常。 – Joseph 2013-02-19 08:06:11

回答

1

你應該在application:didFinishLaunchingWithOptions:通過獲取URL從options字典。UIApplicationLaunchOptionsURLKey鍵處理「打開方式。」 - 而不是在url直接application:openUrl:sourceApplication:annotations傳遞。

https://developer.apple.com/library/ios/#documentation/FileManagement/Conceptual/DocumentInteraction_TopicsForIOS/Articles/OpeningSupportedFileTypes.html#//apple_ref/doc/uid/TP40010412-SW1

+0

但是,我如何處理對已經在後臺打開的應用程序的調用? 'application:didFinishLaunchingWithOptions'不會再被調用,對嗎? – Joseph 2013-02-19 07:04:09

4

您應該只在application:openUrl:sourceApplication:annotations處理此案。根據文件(https://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:openURL:sourceApplication:annotation:):

如果您的應用程序,還需要發起打開URL,應用程序調用的application:willFinishLaunchingWithOptions:application:didFinishLaunchingWithOptions:方法第一,其次是這種方法。這些方法的返回值可用於防止調用此方法。 (如果應用程序已經運行,只有這種方法被調用。)

因此,不需要處理application:didFinishLaunchingWithOptions:中的打開文件了。

+0

正是我需要知道的,方法調用的順序,我在別處找不到。 – 2015-01-23 09:51:05

相關問題