Objective C从另一个应用程序检索数据

时间:2011-04-14 12:36:57

标签: objective-c cocoa-touch ios interaction openurl

我写了两个应用程序,我需要它们之间的交互。我的意思是,在第一个应用程序中,有一个视图,您需要添加一个数字。但如果你不想写下来,另一个应用程序会为你生成它。所以我需要第二个应用程序生成的数字,并用它填充视图。

我读了很多关于这个主题的内容,我知道我必须使用自定义URL方案。一篇关于此的好文章,例如:link。所以,如果我理解,我需要定义这样的方案:

在第一个应用中:

  • 网址标识符: com.mycompany.myfirstapp
  • URL方案第一项:myFirstApp

在第二个应用中:

  • 网址标识符: com.mycompany.mysecondapp
  • 网址方案第一项:mySecondApp

然后在第一个应用程序中,例如在按钮的IBAction中:

[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mySecondApp://pleaseGenerateNumber"]];

在第二个应用程序中,我必须实现

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

方法和

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

方法。然后解析URL,并生成数字。但问题出在这里。如何“告诉”第一个应用程序第一个应用程序生成的数字?我必须再次使用openURL,并通过URL检索号码?

2 个答案:

答案 0 :(得分:1)

在iOS4.2中可用,使用方案将数据从一个应用程序传递到另一个应用程序,您可以使用UIApplicationDelegate协议方法

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

从文档中,annotation是:

  

源应用程序提供的属性列表对象,用于将信息传递给接收应用程序。

编辑:事实证明你可以在iOS 3.2下使用注释; application:DidFinishLaunchingWithOptions:允许选项字典中的注释键。

答案 1 :(得分:0)

为获得最大兼容性(iOS 3+),是的,您必须再次使用openURL,将该号码作为URL参数传回。要重用系统提供的URL解析代码,请确保您的URL格式遵循HTTP模板:

模式://有点 - 主机/有点儿-路径参数

考虑使用kinda-host作为命令代码并将数据作为路径和/或参数传递;这样,您可以扩展通信协议,而无需引入额外的URL方案。

是的,这很难看。这就是iOS。