如果应用程序尚未打开,请打开“...”问题
我的应用程序可以读取使用“打开方式...”对话框打开的.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错误,指出这些文件不存在。
如果我重复步骤(应用程序在后台打开)比找到文件并立即生效。 这是为什么?
你应该在application:didFinishLaunchingWithOptions:
通过获取URL从options
字典。UIApplicationLaunchOptionsURLKey
键处理“打开方式。” - 而不是在url
直接application:openUrl:sourceApplication:annotations
传递。
但是,我如何处理对已经在后台打开的应用程序的调用? 'application:didFinishLaunchingWithOptions'不会再被调用,对吗? – Joseph 2013-02-19 07:04:09
您应该只在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:
中的打开文件了。
正是我需要知道的,方法调用的顺序,我在别处找不到。 – 2015-01-23 09:51:05
您是否在'application:didFinishLaunchingWithOptions:'的选项字典中引用'openUrl:url'的URL或者由'UIApplicationLaunchOptionsURLKey'键指定的值? – 2013-02-18 20:38:22
如果您的应用程序尚未运行,您将收到一个'application:didFinishLaunchingWithOptions:'消息,其中包含选项字典中的URL,然后您还将**接收到一个'application:openURL:sourceApplication:annotation:''信息。确保你没有在第一种方法中删除该文件,然后期望在第二种方法被调用时它仍然存在。 – 2013-02-18 21:02:22
这可能是问题所在。我在'didFinishLaunchingWithOptions'和'application:openURL'之后没有找到任何东西的时候删除了这个文件。我现在只处理'application:openURL'中的文件,它似乎工作正常。 – Joseph 2013-02-19 08:06:11