4

我的应用程序可以读取使用“打开方式...”对话框打开的 .txt 文件。我在两个中都实现了我的读取功能

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

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

方法。

有趣的是,它似乎只有在应用程序之前打开时才有效。如果我在 ie Mail 中打开一个 .txt 文件并选择“打开方式”然后是我的应用程序。我可以在控制台中看到,

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

被调用。我还可以看到正确文件的 URL,该文件可能位于

文件://localhost/private/var/mobile/Applications/F15C57D0-4F62-4979-943A-2D387488D59C/Documents/Inbox/myFile.txt

但是当我尝试打开文件时,我得到一个文件不存在的 Cocoa 错误。

如果我重复这些步骤(在后台打开应用程序),则找到该文件并立即运行。为什么是这样?

4

2 回答 2

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:

于 2014-08-01T14:07:49.240 回答
1

您应该通过使用键从字典中application:didFinishLaunchingWithOptions:获取 URL来处理“打开方式..” - 而不是直接传入的.optionsUIApplicationLaunchOptionsURLKeyurlapplication:openUrl:sourceApplication:annotations

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

于 2013-02-18T20:54:17.617 回答