面对文档共享中的问题

时间:2013-11-28 12:18:52

标签: ios iphone objective-c ipad appdelegate

我正处于一些文档共享问题。我的iPhone有两个应用程序。一个应用程序“SharingApp”使用文档交互控制器将文件从其软件包共享到另一个应用程序“ViewerApp”。默认情况下,共享文件将保存到名为“收件箱”的文件夹下的“ViewerApp”文档目录中。我可以将“ViewerApp”的didFinishLaunchingWithOptions:中的网址设为

NSURL *url = (NSURL*)[launchOptions valueForKey: UIApplicationLaunchOptionsURLKey];

如果未启动“ViewerApp”,则此方案可以正常运行。

我遇到的问题是,如果“ViewerApp”处于后台状态(或未被杀死),并且文件是从“SharingApp”共享的,则在applicationDidBecomeActive:中调用appDelegate “ViewerApp”。因此,我无法获取url,因为didFinishLaunchingWithOptions:方法未被调用(ViewerApp已经启动)。在进入后台状态之前,“ViewerApp”将以最后一个共享url打开。

我如何处理获取url中的applicationDidBecomeActive:?如果您遇到过这类问题,请分享一些想法。 谢谢你的想法。

2 个答案:

答案 0 :(得分:2)

您应该实现以下UIApplicationDelegate方法

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

这可以解决您的问题,因为当您的查看器应用程序处于后台时,将调用此方法

答案 1 :(得分:0)

我遇到了同样的问题。问题是当应用程序已经打开但是被带到前台时,不会调用didFinishLaunchingWithOptions。我把我的代码从didFinishLaunchingWithOptions中取出来,然后将它放在handleOpenURL中(也在app delegate页面上)

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    if (url != nil && [url isFileURL])
    {
        MainViewController *frontViewController = [[MainViewController alloc] init];
        [frontViewController handleOpenURL:url]; //function on my main view controller class to do the necessary action

        return YES;
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"  message:@"Cannot Handle Opening This File."  delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];

        return NO;
    }
}