iOS之程序间通讯

Posted Hunter_Wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS之程序间通讯相关的知识,希望对你有一定的参考价值。

程序间通讯
 
1 设置程序标识,名字自己起,
 技术分享

技术分享

 
 
2 在想要跳转的地儿 加入这行代码就可以 

UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ProductTwo:"]];

例如:one工程程序中:(调用openURL)

//
//  ViewController.m
//  程序间通讯OneProduct
//
//  Created by dllo on 16/3/24.
//  Copyright © 2016年 HaiTeng. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor grayColor];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    // ProductTwo:(你自己的工程名)name=xx&age=xx(你想传的参数用&连接多参数)
    //注意:参数中不可有中文
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ProductTwo://name=xx&age=xx"]];
    
    /*
     LaunchServices: ERROR: There is no registered handler for URL scheme ProductTwo
     
     程序间通讯:前提 保证手机上两款app同时存在
     */
}




@end

 3 然后事件收到相应,你会接到这样的提示,说明你成功了

技术分享

 

注意:

  /*

     LaunchServices: ERROR: There is no registered handler for URL scheme ProductTwo

     程序间通讯:前提 保证手机上两款app同时存在

     */

///////当然仅仅这样然而没什么软用,通常我们借用程序间通讯进而进行传值

 

two程序中:(在AppDelegate)

//
//  AppDelegate.m
//  程序间通讯TwoProduct
//
//  Created by dllo on 16/3/24.
//  Copyright © 2016年 HaiTeng. All rights reserved.
//

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    return YES;
}
//ios9.0之前(目前已废弃)
//- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
//    return YES;
//}
//ios9.0推荐使用此方法(最新,程序One跳到我的时候, 在此方法中,我可以接受到它传过来的值,进行一些操作)
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
    
    //解码
    NSString *recetext  = [url.host stringByRemovingPercentEncoding];
    NSLog(@"%@",recetext); //打印看看One程序传过来的值
    
    //若想回传到OneProduct可执行此方法(同样在OneProduct工程的appdelegate 中写openUrl方法即可得到我穿回来的参数)
    [self performSelector:@selector(goBackOneProduct:) withObject:nil afterDelay:2];
    return YES;
}
- (void)goBackOneProduct:(id)object{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ProductOne://name=TwoProductSendData&age=xx"]];
}

@end

 

此时你会在TWO程序中看到打印(说明你成功了) 

技术分享

//总结:

 说白了就是,调用此代码    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ProductOne://name=TwoProductSendData&age=xx"]];

通过URL Schemes 标识 进行跳转

以上是关于iOS之程序间通讯的主要内容,如果未能解决你的问题,请参考以下文章

IPC之消息队列·即时通讯小程序

wpf进程间通讯

QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开

进程和线程的关系及区别,进程间如何通讯,线程间如何通讯

Android-Android进程间通讯之messenger

小程序 自定义组件 并实现组件间通讯