2013-02-18 99 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

相关问题