iOS应用程序之间数据共享

74 篇文章 0 订阅
66 篇文章 0 订阅

iOS应用程序间共享数据


我们知道由于iOS有安全沙盒机制,应用之间是不能直接访问,但是Apple友好的提供了四种访问机制
它们分别是:
1. 粘贴板             UIPasteboard
2. 自定义URL Scheme      
3. App Groups
4. 钥匙串

以下,就详细的说说它们的原理和具体怎么使用。

首先,创建两个项目, 它们分别是:PSharedData1,PSharedData2

1. 粘贴板    UIPasteboard
    例如:有道词典,在搜索词的文本框里点击时
               百度浏览器, QQ浏览器,在搜索关键词时,
               会把从别处复制到剪切板的内容给自动显示出来
    出于这样的功能,在PSharedData1里,我们把数据通过UIPasteboard设置进去,然后启动PSharedData2,读取UIPasteboard里的内容

详细代码:
PSharedData1项目里
 
- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIImage *im1 = [UIImage imageNamed:@"2.png"];
    UIImage *im2 = [UIImage imageNamed:@"2.png"];
    UIImage *im3 = [UIImage imageNamed:@"2.png"];
    
    UIColor *c1 = [UIColor redColor];
    UIColor *c2 = [UIColor redColor];
    UIColor *c3 = [UIColor redColor];
   
    UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"com.xiaoruigege.pasteboard" create:YES];
    pasteboard.strings = @[@"aa",@"bb",@"cc",@"dd"];
    pasteboard.images = @[ im1, im2, im3];
    pasteboard.colors = @[c1, c2, c3];
    
}

PSharedData2项目里
- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"<pre name="code" class="objc">com.xiaoruigege.pasteboard
" create:NO]; NSArray<NSString *> *strings = pasteboard.strings; NSArray<UIImage *> *images = pasteboard.images; NSArray<UIColor *> *colors = pasteboard.colors; NSLog(@"string: %@, colors : %@, images: %@", strings, colors, images);}
 
 注意:UIPasteboard可以存放NSString, UIImage, UIColor,  但是每次设值,只能存放一种数据类型,以最后一次赋值为主 
比如:我在PSharedData1项目里,同时设置了三种数据类型和数据
    pasteboard.strings = @[@"aa",@"bb",@"cc",@"dd"];
    pasteboard.images = @[ im1, im2, im3];
    pasteboard.colors = @[c1, c2, c3];
但是,从 PSharedData2项目里,取出值,仅仅只有colors有值,因为colors在设值时,是最后一个
    NSArray<NSString *> *strings = pasteboard.strings;
    NSArray<UIImage *> *images = pasteboard.images;
    NSArray<UIColor *> *colors = pasteboard.colors;





2.自定义URL  Scheme
   例如:我们分享微博时,第三方应用使用QQ, 微信等登陆时
             从我们自己的客户端跳转到到微博,QQ客户端时,使用的就是自定义URL
   当然,也可以作为我们从一个客户端跳转另一个客户端时通过制定URL,并且可以传参数,且参数是不可见的

详细代码:
PSharedData1项目中的info.plist文件中配置如下


URL identifier   一般可以取公司域名倒置
URL Schemes  是关键,它是一个Array,表示可以用多种方式打开,我这里定义xiaoruigege, 即表示其他项目可以通过 xiaoruigege://就可以打开PSharedData1项目(就是自己)
但是在iOS9中,必须要在打开的项目里配置白名单(被打开项目的URL Scheme)

PSharedData2项目里,配置白名单,适用于iOS9.0及以上,iOS8.0及以下不用配置,也可以打开
info.plist配置是


通过PSharedData2项目,打开PSharedData1项目的调用代码
        NSURL *url = [NSURL URLWithString:@"xiaoruigege://param=1&m=2"];
        [[UIApplication sharedApplication] openURL:url];

自定义URL  xiaoruigege://param=1&m=2  
param=1&m=2   这是参数列表

PSharedData1项目打开后,会执行如下appDelegate中的代理函数
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([[url scheme] hasPrefix:@"xiaoruigege://"]) {
        
        //解析URL获取数据
        
        return YES;
    }
    return NO;
}








3. App Groups

iOS8之后苹果加入了App Groups功能,应用程序之间可以通过同一个group来共享资源,app group可以通过NSUserDefaults进行小量数据的共享,
如果需要共享较大的文件可以通过NSFileCoordinator、NSFilePresenter等方式。
开启app groups,需要添加一个group name,app之间通过这个group共享数据:

步骤:点击项目  -> 选择相应的Target  -> 选择Capabilities项  ->  点开App Groups   ->  点击下面的加号,添加一个字符串作为标识 ,group.xiaoruigege.shareddata  是我自己写的标识



PSharedData1项目和PSharedData2项目的这块设置成一致,就OKAY了

设值
    NSUserDefaults *myDefaults = [[NSUserDefaults alloc]
                                  initWithSuiteName:@"group.xiaoruigege.shareddata"];
    [myDefaults setObject:@"group.xiaoruigege.shareddata" forKey:@"mykey"];

取值
    NSUserDefaults *myDefaults = [[NSUserDefaults alloc]
                                  initWithSuiteName:@"group.xiaoruigege.shareddata"];
    NSString *content = [myDefaults objectForKey:@"mykey"];
    NSLog(@"AppGroups: %@", content);






4. KeyChain 钥匙串

iOS的keychain提供一种安全保存信息的方式,可以保存密码等数据,而且keychain中的数据不会因为你删除app而丢失,你可以在重新安装后继续读取keychain中的数据。通常每个应用程序只允许访问自己在keychain中保存的数据,不过假如你使用同一个证书的话,不同的app也可以通过keychain来实现应用间的数据共享

为了实现keychain共享数据,我们需要开启Keychain Sharing,开启方法如下,然后添加设置相同的Keychain Group,不过别忘记了添加Security.framework。


将项目和项目的这里设置成一样,就可以达到两个项目互相设值并且访问

这里的代码以开源库https://github.com/VictorZhang2014/ZRKeyChain
来举个例子,详细使用,请点击该链接






 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi是一种编程语言,用于开发Windows平台下的应用程序。而ECharts是一种流行的JavaScript图表库,用于数据可视化。在移动应用开发中,我们可以使用Delphi开发iOS应用,并结合ECharts实现图表展示和数据分析功能。 Delphi提供了一套完整的开发工具和框架,开发者可以使用Delphi IDE来设计界面、编写代码,并生成可在iOS设备上运行的应用。开发者可以利用Delphi App Tethering技术,通过无线网络连接多台设备,实现数据通信和同步,方便在多个设备之间共享和展示图表数据。 在Delphi iOS应用中集成ECharts并展示图表非常简单。我们可以通过将ECharts的JavaScript文件嵌入到Delphi应用中,并在应用中使用WebBrowser组件来加载和显示图表。开发者可以利用Delphi提供的WebBrowser组件的接口,通过JavaScript与应用进行交互,动态调整图表的显示和数据。此外,Delphi也提供了对HTML5和CSS的支持,可以利用WebBrowser组件自定义和美化图表的样式。 Delphi iOS应用结合ECharts的优点在于,Delphi提供了一种快速、高效的开发方式,可以迅速开发出功能丰富、性能卓越的iOS应用。而ECharts则提供了强大的数据可视化功能,支持多种图表类型和交互方式,可以满足各种数据展示和分析需求。因此,结合Delphi和ECharts,我们可以轻松实现高质量的iOS应用,并通过图表展示数据,使应用更加直观和易于理解。 ### 回答2: Delphi是一种广泛用于开发Windows平台上应用程序的编程语言和集成开发环境。它具有丰富的可视化设计工具和组件库,以简化应用程序的开发过程。Delphi可以用于开发各种类型的应用程序,包括桌面应用程序、服务应用程序数据应用程序等。 而Echarts是一个基于JavaScript的开源图表库,以其丰富的图表类型、灵活的配置选项和强大的交互功能而著名。Echarts可以轻松地为Web应用程序提供各种图表展示,如折线图、柱状图、饼图等。它被广泛应用于大数据可视化、BI报表以及数据分析等领域。 目前,Delphi已经开始支持运行在iOS操作系统上的应用程序的开发。开发者可以使用Delphi IDE中的相关工具和组件来创建iOS应用程序,包括图表展示。而对于使用Delphi开发iOS应用程序中的图表展示,可以通过使用Echarts的JavaScript代码,嵌入到Delphi应用程序中来实现。 开发者可以在Delphi中通过使用TWebBrowser组件,并配合使用WebView来加载和运行Echarts的JavaScript代码,以实现对Echarts图表的展示。在Delphi IDE中,开发者可以设计并创建用户界面,然后通过编写适当的代码,将Echarts图表展示在iOS应用程序中。 综上所述,使用Delphi开发iOS应用程序时,可以通过集成Echarts图表库来实现各种图表展示。这使得开发者能够利用Echarts强大的图表功能和Delphi的开发便利性来创建更加丰富和交互性的iOS应用程序。 ### 回答3: Delphi是一种基于Object Pascal语言开发的集成开发环境(IDE),适用于Windows、macOS和iOS等多平台的软件开发。而echarts是一个开源的数据可视化库,可以用于在网页中创建各种图表。 在Delphi中使用echarts来开发iOS应用,可以借助第三方组件库或直接使用echarts的JavaScript库进行集成。第三方组件库如TWebBrowser等,可以将echarts的网页嵌入到Delphi的应用中,并通过与JavaScript进行交互来实现数据传递和图表更新等功能。 通过echarts,我们可以在Delphi开发的iOS应用中实现各种图表类型,如折线图、柱状图、饼图等。可以使用Delphi中的数据源来获取数据,并通过echarts的API将数据传递到图表中,实现动态更新和交互效果。 在Delphi中集成echarts可以为iOS应用提供强大的数据展示和分析功能。用户可以通过图表直观地了解数据的趋势和关系,进一步做出相应的决策。而Delphi的跨平台特性也使得我们能够用同一套代码开发适用于多个平台的应用,提高开发效率。 总而言之,Delphi中使用echarts可以为iOS应用提供丰富的数据可视化功能,帮助用户更好地理解和分析数据,并支持跨平台开发。这样的组合将为开发者提供更多的选择和灵活性,使得应用开发更加便捷和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值