我正处于一些文档共享问题。我的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:
?如果您遇到过这类问题,请分享一些想法。
谢谢你的想法。
答案 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;
}
}