我的应用可以读取使用“打开方式...”对话框打开的.txt文件。我在
中实现了我的读取功能-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
和
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法
有趣的是,它似乎只有在应用程序之前打开时才有效。如果我在邮件中打开.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错误,文件不存在。
如果我重复这些步骤(应用程序在后台打开),则找不到文件,它会立即生效。 这是为什么?
答案 0 :(得分: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:):
如果您的应用必须启动才能打开网址,应用会先调用
application:willFinishLaunchingWithOptions:
和application:didFinishLaunchingWithOptions:
方法,然后再使用此方法。这些方法的返回值可用于防止调用此方法。 (如果应用程序已在运行,则仅调用此方法。)
因此,无需再处理application:didFinishLaunchingWithOptions:
中的打开文件。
答案 1 :(得分:1)
您应该在application:didFinishLaunchingWithOptions:
期间处理“打开方式...”,方法是使用options
密钥从UIApplicationLaunchOptionsURLKey
词典中获取网址,而不是直接传递给url
application:openUrl:sourceApplication:annotations
。