zoukankan      html  css  js  c++  java
  • iPhone应用程序间传递数据

      前一篇简单的介绍了iPhone应用程序间通信,主要是通过在被调用应用的Info.plist中加入URL方案,在应用中通过openUrl来实现程序的调用。而应用程序间的数据传递则可以更具url来实现,例如我要在test应用中输入一个参数,将其传递给URLSchemeDemo中。则可以按照下面方法实现:

     NSString *temp = [NSString stringWithFormat:@"URLSchemeDemoapp:message=%@",self.message.text];
    NSURL *url = [NSURL URLWithString:temp];
    [[UIApplication sharedApplication] openURL:url];

    message.text为输入的数据,URLSchemeDemoapp为被调用程序URLSchemeDemo的URL方案。

      接下来就是URLSchemeDemo怎么来接受这个参数了,在UIApplicationDelegate中的

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions方法中,参数字典launchOptions包含了调用该函数的应用名称(UIApplicationLaunchOptionsSourceApplicationKey)和URL(UIApplicationLaunchOptionsURLKey)。该方法实现如下:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    //处理应用程序间信息共享
    if (launchOptions) {
    NSString *sourceApp = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];
    NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
    NSString *msg = [NSString stringWithFormat:@"sourceApp:%@,url:%@",sourceApp,url];
    self.viewController.message.text = msg;
    }



    return YES;
    }

    先判断是否被调用,如果被调用,则将调用程序的标识符和调用的URL输出来。

    程序效果如下:

    test应用


    URLSchemeDemo应用

    在test中输入参数,这里是123,并且点击调用按钮。

    名称和路径传输成功。

       但是在didFinishLaunchingWithOptions来获取url有一个弊病,就是程序只能调用一个第二次调用时参数变了输入的信息也不会改变,这是因为didFinishLaunchingWithOptions只是在程序完成运行的时候调用。那用UIApplicationDelegate的- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url就能很好的解决这个问题,该函数在每次其他应用通过url来调用该应用时被调用,参数即为url,那么,通过这种方式来调用就更方便了。

    /*
    *响应其他应用程序通过URL方案来调用该程序时的方法
    */
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{

    self.viewController.message.text = [NSString stringWithFormat:@"%@",url];

    return YES;
    }



  • 相关阅读:
    DataGridView 设置行不可见时,与货币管理器的位置关联的行不能设置为不可见
    DataGridView 冻结列后出现 无法添加该列,原因是它被冻结并被置于未冻结的列之后
    sql 2000 查询中增加序号列,自动增加列
    SQL 语法大全
    清除vs2003vs2008起始页最近打开项目
    ALTER TABLE 修改表时 因为有一个或多个对象访问此列
    UNIX上C++程序设计守则(信号和线程)(上)
    Thread Cancel 指南
    [C++再学习系列] 深入new/delete:New的3种形态
    设计模式学习(六):重构与模式,推荐书籍(完)
  • 原文地址:https://www.cnblogs.com/foxmin/p/2405067.html
Copyright © 2011-2022 走看看