iOS学习笔记-APP共享数据之UIPasteboard使用

来源:互联网 发布:四大名助 综艺 知乎 编辑:程序博客网 时间:2024/06/05 04:33

APP之间共享数据的方式约以下几种:

1.URL Scheme

2.App Groups

3.KeyChain共享数据(keychain access group)

4.UIDocumentInteractionController

5.粘贴板UIPasteboard

这里我们详细讲解下UIPasteboard的使用:

注意:在iOS7中,使用 +[UIPasteboard pasteboardWithName:create:]和 +[UIPasteboard pasteboardWithUniqueName]创建剪贴板,只对相同的app group可见

创建方法:

UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"com.company.yourpasteboard" create:YES];pasteboard.persistent = YES; //是否持续存在_myPasteboard = pasteboard;

存值方法:

注意,这是单一存值的方法,即你存的type会覆盖上一次存入的type。这不同于字典

- (void)saveDic:(NSDictionary*)dic forKey:(NSString*)key{    NSData *dictData = [NSKeyedArchiver archivedDataWithRootObject:dic];    [_myPasteboard setData:dictData forPasteboardType:key];}- (void)saveStr:(NSString *)str forKey:(NSString *)key{    NSData *dictData = [NSKeyedArchiver archivedDataWithRootObject:str];    [_myPasteboard setData:dictData forPasteboardType:key];}- (void)saveData:(NSData *)data forKey:(NSString *)key{    [_myPasteboard setData:data forPasteboardType:key];}

还有个方法 setValue:forPasteboard: ,可以存普通的数据类型 : NSDictionary,NSArray,NSString…..
但我用着并不是很好用,还是setData吧

取值方法:

- (id)dataForKey:(NSString *)key{    return [NSKeyedUnarchiver unarchiveObjectWithData:[_myPasteboard dataForPasteboardType:key]];}

清空方法:

- (void)clear{//    1.直接删除剪切板//    [UIPasteboard removePasteboardWithName:SHAREBOARD];//    UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:SHAREBOARD create:YES];//    _myPasteboard = pasteboard;    //2.将剪切板数据置为0  可指定修改type    NSArray *types = [_myPasteboard pasteboardTypes];    for (NSString *type in types) {        if ([type isEqualToString:STATE]) {            return;        }        NSData *dictData = [NSKeyedArchiver archivedDataWithRootObject:@0]; //这里clear的数据类型可以自己定义         [_myPasteboard setData:dictData forPasteboardType:type];    }}

通知监听:

只需要CMD+左键 进去UIPasteboard里面看就行了
这里附图:

这里写图片描述

扩展Extensions:

这里写图片描述

这些属性可以直接使用,例如:

这里写图片描述

取值就直接取属性值就可以了,这是一种快捷的方法;

json与字典的转换:

另外提供下字典json转换方法:

+ (NSDictionary *)dictionaryByJson:(NSString *)json {    if (json == nil) {        return nil;    }    NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];    NSError *error;    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData                                                        options:NSJSONReadingMutableContainers                                                          error:&error];    if(error) {        NSLog(@"json解析失败:%@",error);        return nil;    }    return dic;}+ (NSString*)dictionaryToJson:(NSDictionary *)dic{    NSError *parseError = nil;    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];}

附上demo地址:https://github.com/shengpeng3344/PasteboardTestDemo

0 0
原创粉丝点击