1. UIPasteboard 剪切板
剪贴板是应用程序之间传递数据的简单方式,建议不要使用全局的粘贴板,而是自己根据名字创建一个新的粘贴板,防止其它地方全局拷贝的影响。然后把需要共享的内容复制到粘贴板,粘贴板的内容可以是文本、URL、图片和UIColor等,另一个app就可以根据粘贴板的名字去读取相关的信息。
// Example1:
UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"myPasteboard" create:YES];
pasteboard.string = _sharedDataTextField.text;
// Example2:
UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"myPasteboard" create:NO];
NSString *content = pasteboard.string;
_sharedDataLable.text = content;
2.Shared Keychain Access 钥匙串
iOS的keychain提供一种安全保存信息的方式,可以保存密码等数据,而且keychain中的数据不会因为你删除app而丢失,你可以在重新安装后继续读取keychain中的数据。通常每个应用程序只允许访问自己在keychain中保存的数据,不过假如你使用同一个证书的话,不同的app也可以通过keychain来实现应用间的数据共享
// Example1保存数据到keychain
- (void)setKeyChain{
[SSKeychain setPassword:@"shareData" forService:@"myservice" account:@"jiangbin"];
}
Example2读取数据
- (IBAction)getByKeychain:(id)sender{
NSString *myData = [SSKeychain passwordForService:@"myservice" account:@"jiangbin"];
}
3.App Groups (iOS8之后苹果加入了App Groups)
iOS8之后苹果加入了App Groups功能,应用程序之间可以通过同一个group来共享资源,app group可以通过NSUserDefaults进行小量数据的共享,如果需要共享较大的文件可以通过NSFileCoordinator、NSFilePresenter等方式。
// Example1根据group name设置内容:
- (void)setAppGroup{
NSUserDefaults *myDefaults = [[NSUserDefaults alloc]
initWithSuiteName:@"group.com.jiangbin.SharedData"];
[myDefaults setObject:@"shared data" forKey:@"mykey"];
}
//Example2根据group name读取数据
- (void)getByAppGroup {
NSUserDefaults *myDefaults = [[NSUserDefaults alloc]
initWithSuiteName:@"group.com.jiangbin.SharedData"];
NSString *content = [myDefaults objectForKey:@"mykey"];
}
4.Custom URL Scheme
URL Scheme能够让我们通过自定义的协议在应用程序间传递信息,当你想要发送数据给一个实现了自定义URL Scheme的应用时,只需要创建好合适格式的URL,然后调用openURL:方法,系统就会载入注册了该scheme的应用然后将你的URL传递给他
NSURL *myURL = [NSURL URLWithString:@"todolist://newid=20"];
[[UIApplication sharedApplication] openURL:myURL];
// Eaxmple1发送携带参数的URL到Example2:
NSString *string = @"Example2://name=jiangbin#age=1";
NSURL *url = [NSURL URLWithString:string];
[[UIApplication sharedApplication] openURL:url];
// Example2处理URL请求并解析:
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if ([[url scheme] isEqualToString:@"Example2"]) {
NSString *content = [url resourceSpecifier];
//解析content获取数据
//...
return YES;
}
return NO;
}
网友评论