iOS应用程序间共享数据

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

1、UIPasteboard

剪贴板是应用程序之间传递数据的简单方式,建议不要使用全局的粘贴板,而是自己根据名字创建一个新的粘贴板,防止其它地方全局拷贝的影响。然后把需要共享的内容复制到粘贴板,粘贴板的内容可以是文本、URL、图片和UIColor等,另一个app就可以根据粘贴板的名字去读取相关的信息。

设置粘贴板的内容:

UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"myPasteboard" create:YES];

pasteboard.string = @"myShareData";

读取粘贴板的内容:

UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"myPasteboard" create:NO]; NSString *content = pasteboard.string;

2、Custom URL Scheme

NSURL *myURL = [NSURL URLWithString:@"todolist://newid=20"];
[[UIApplication sharedApplication] openURL:myURL];

3、Shared Keychain Access

保存数据到keychain(为了简单使用SSKeychian)

- (void)setKeyChain
{
 [SSKeychain setPassword:@"shareData" forService:@"myservice" account:@"jiangbin"];
}

读取数据

- (IBAction)getByKeychain:(id)sender
{
    NSString *myData = [SSKeychain passwordForService:@"myservice" account:@"jiangbin"];
}

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

- (void)setAppGroup 
{
    NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.jiangbin.SharedData"];
    [myDefaults setObject:@"shared data" forKey:@"mykey"];
}

根据group name读取数据

- (void)getByAppGroup 
{
    NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.jiangbin.SharedData"];
    NSString *content = [myDefaults objectForKey:@"mykey"];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载:http://www.jianshu.com/p/169e31cacf42 我们知道iOS由于沙盒的存在,应...
    F麦子阅读 3,860评论 0 0
  • 我们知道iOS由于沙盒的存在,应用程序不能越过自己的区域去访问别的存储空间的内容,不过可能有许多场景我们需要在应用...
    King_Liu阅读 4,425评论 0 3
  • 我们知道iOS由于沙盒的存在,应用程序不能越过自己的区域去访问别的存储空间的内容,不过可能有许多场景我们需要在应用...
    树下老男孩阅读 15,144评论 23 83
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,390评论 19 139