Ios &引用;“以…开头”;如果应用程序尚未打开,则会出现问题
我的应用程序可以读取通过“打开方式…”对话框打开的.txt文件。我在两个Ios &引用;“以…开头”;如果应用程序尚未打开,则会出现问题,ios,objective-c,appdelegate,ios6.1,Ios,Objective C,Appdelegate,Ios6.1,我的应用程序可以读取通过“打开方式…”对话框打开的.txt文件。我在两个 -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 及 方法 有趣的是,它似乎只在应用程序之前打开的情况下才起作用。如果我在电子邮件中打开一个.txt文件并选择“打开方式”,则我的应用程序。
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
及
方法
有趣的是,它似乎只在应用程序之前打开的情况下才起作用。如果我在电子邮件中打开一个.txt文件并选择“打开方式”,则我的应用程序。我可以在控制台上看到
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
有人打电话来。我还可以看到正确文件的URL,该文件在
file://localhost/private/var/mobile/Applications/F15C57D0-4F62-4979-943A-2D387488D59C/Documents/Inbox/myFile.txt
但是当我试图打开文件时,我得到一个错误,即文件不存在
如果我重复这些步骤(应用程序在后台打开),那么文件就会被找到并立即工作。
这是为什么?您应该处理“打开…”在
应用程序期间:通过使用uiapplicationaunchoptionsurlkey
键从options
字典中获取URL,而不是直接传入应用程序:openUrl:sourceApplication:annotations
的URL
完成启动
您应该只在应用程序:openUrl:sourceApplication:annotations
中处理该情况。根据文件():
如果必须启动应用程序才能打开URL,应用程序将首先调用应用程序:willFinishLaunchingWithOptions:
和应用程序:didffinishlaunchingwithoptions:
方法,然后调用此方法。这些方法的返回值可用于防止调用此方法。(如果应用程序已在运行,则仅调用此方法。)
所以,不再需要在应用程序:didFinishLaunchingWithOptions:
中处理打开文件。您指的是打开url:url
的url,还是应用程序:didFinishLaunchingWithOptions:
的选项字典中由键UIApplicationLaunchionSurlkey指定的值?如果您的应用程序尚未运行,您将收到一条应用程序:didFinishLaunchingWithOptions:
消息,其中包含选项词典中的URL,然后您还将收到一条应用程序:openURL:sourceApplication:注释:
消息。确保您没有在第一个方法中删除文件,然后在调用第二个方法时希望它仍然存在。这可能就是问题所在。我在didfishlaunchingwithoptions
之后删除了该文件,而应用程序:openURL
没有找到任何内容。我现在只处理应用程序中的文件:openURL
,它似乎工作正常。谢谢@rob mayoff。我也确实如此。在启动时的清理过程中,我正在删除该文件。但是,如何处理对已在后台打开的应用程序的调用<代码>应用程序:didFinishLaunchingWithOptions
不会再次被调用,对吗?这正是我需要知道的,方法调用的顺序,我在别处找不到。
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation