前一篇简单的介绍了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;
}

iPhone应用程序间传递数据的更多相关文章

  1. 在微信小程序页面间传递数据总结

    在微信小程序页面间传递数据 原文链接:https://www.jianshu.com/p/dae1bac5fc75 在开发微信小程序过程之中,遇到这么一些需要在微信小程序页面之间进行数据的传递的情况, ...

  2. 小菜学习Winform(五)窗体间传递数据

    前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式. 共有字段传递 共有字段传递实现起来很方便, ...

  3. iOS应用程序间共享数据

    我们知道iOS由于沙盒的存在,应用程序不能越过自己的区域去访问别的存储空间的内容,不过可能有许多场景我们需要在应用程序之间共享数据,比如多个应用共用用户名密码进行登录等.虽然我们不能直接通过文件系统来 ...

  4. C#中使用SendMessage在进程间传递数据的实例

    原文:C#中使用SendMessage在进程间传递数据的实例 1 新建解决方案SendMessageExample 在解决方案下面新建三个项目:CopyDataStruct,Receiver和Send ...

  5. WinForm 窗体间传递数据

    前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式. 共有字段传递 共有字段传递实现起来很方便, ...

  6. contentprovider提供程序间共享数据的统一接口

    contentprovider提供程序间共享数据的统一接口

  7. StoryBoard学习(5):使用segue页面间传递数据

    StoryBoard学习(5):使用segue页面间传递数据 函数: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sen ...

  8. 使用Bundle在Activity间传递数据

    使用Bundle在Activity间传递数据 源Activity public class SourceActivty extends Activity { private Intent intent ...

  9. H5 页面与小程序之间 传递数据

    H5 页面与小程序之间 传递数据 小程序里面的 H5页面与小程序之间怎么传递数据 webview与小程序之间的实时通信 webview主动发消息给小程序 webview可以利用jssdk提供的 wx. ...

随机推荐

  1. hdu 2689

    hdu 2689 超级大水题....两种代码都过了,开始以为n^2会tle,后来竟然过了...汗 注意下cin写在while里面,就可以了 #include <iostream> usin ...

  2. 操作sql - 类型初始值设定项引发异常

    这个异常我还是第一次看见,网上有人说,若出现异常,则访问所有的静态成员,均会抛出异常. 在我碰到的问题中,如下代码: ; static private System.Data.DataTable Re ...

  3. 在vim中设置 '打印时间'的快捷键.

    在 ~/.vimrc (没有该文件可以手动创建)中输入 map <F4> <Esc>:r !date<CR> 实现在 '一般模式'状态点击 F4时,自动在vim中打 ...

  4. oracle中 connect by prior 递归算法 -- 理解

    oracle中 connect by prior 递归算法 -- 理解 http://blog.163.com/xxciof/blog/static/7978132720095193113752/  ...

  5. 传输层-TCP

    UDP协议提供了端到端之间的通讯,应用程序只需要在系统中监听一个端口,便可以进行网络通讯.随着计算机网络的发展,计算机网络所承载的业务越来越多,有些业务数据的传输需要具备可靠性,譬如我们在进行在线聊天 ...

  6. angularjs使用directive实现倒计时按钮

    前不久在做一个彩票的项目时,有一个手动开奖的需求.所以有了这个倒计时按钮.下面分享下具体的代码: 效果: 代码: App.directive('timerBtn', function() { // 倒 ...

  7. Axure矩形边框重合边框变成双倍宽度解决办法

    选中两个矩形,菜单栏选择项目——项目设置——边界对齐(选择中心边界沿形状的边缘或者内边界对齐.将外边界对齐改为内边界对齐),即可去掉重合效果

  8. Ubuntu等Linux系统清除DNS缓存的方法

    buntu等Linux系统清除DNS缓存的方法 直接说方法: 如果系统下有nscd,那么就直接 sudo /etc/init.d/nscd restart 如果没有也没关系,网上接受的方法大都是 su ...

  9. ubuntu下怎么显示右上角的小键盘

    Ubuntu右上角小键盘不见了解决方法: ibus输入法的图标经常消失,输入中文时很不方便,重启一下ibus!   按Ctrl+ALT+T 快捷键打开终端,   输入:   1.killall ibu ...

  10. GUI编程(一)-----概述

    软件的交互方式 1.命令交互方式. 2.图像交互方式.Java提供了专业的API用于开发图形用户界面(GUI--> Graphic  User   Interface). GUI的分类 1.AW ...