iOS—UIPasteboard使用注意事项

简介:

初始化方法

UIPasteboard 的初始化方法主要有3类

//获取系统级别的剪切板
+ (UIPasteboard *)generalPasteboard;
//获取一个自定义的剪切板 name参数为此剪切板的名称 create参数用于设置当这个剪切板不存在时 是否进行创建
+ (nullable UIPasteboard *)pasteboardWithName:(NSString *)pasteboardName create:(BOOL)create;
//获取一个应用内可用的剪切板
+ (UIPasteboard *)pasteboardWithUniqueName;

上面3个初始化方法,分别获取或创建3个级别不同的剪切板,下面我们详解一下在什么情况下用哪种初始化方法

+ (UIPasteboard *)generalPasteboard;
系统级别的剪切板在整个设备中共享,而且会持久化,即应用程序被删掉,其向系统级的剪切板中写入的数据依然在。

+ (nullable UIPasteboard *)pasteboardWithName:(NSString *)pasteboardName create:(BOOL)create;自定义的剪切板通过一个特定的名称字符串进行创建,它在应用程序内或者同一开发者开发(必须Bundle Identifier 例com.maoshaoqian.** 星号前部一样)的其他应用程序中可以进行数据共享。举个例子:比如你开发了多款应用,用户全部下载了,在A应用中用户拷贝了一些数据(为了数据安全,不用系统级别的Pasteboard),在打开B应用时就会自动识别,提高用户体验。

注意:要使用不同app共享的话,注意上面加粗的部分,很重要!

+ (UIPasteboard *)pasteboardWithUniqueName;第3个方法创建的剪切板等价为使用第2个方法创建的剪切板,只是其名称字符串为nil,它通常用于当前应用内部。(当然也可以跨应用使用,但必须Bundle Identifier 例com.maoshaoqian.** 星号前部一样

注意:使用第3个方法创建的剪切板默认是不进行数据持久化的,及当应用程序退出后,剪切板中内容将别抹去。若要实现持久化,需要设置persistent属性为YES。

使用剪贴板实例

使用剪贴板,如果需要app间共享

1、不能覆盖原剪贴板信息,比如(淘口令)信息
2、自己写入的业务需要相互覆盖
3、不同的业务,不能相互覆盖,只能增加
4、基本逻辑就是,读取剪贴板,识别自身业务信息,做覆盖或者添加后,再次写入
5、剪贴板无增加信息的API,只有全部覆盖

//根据业务Key,读取剪贴板
-(NSDictionary*)readUIPasteboardBizKey:(NSString*)key{
    UIPasteboard *sysPasteboard = [UIPasteboard generalPasteboard];
    __block NSDictionary *result = nil;
    if(sysPasteboard.hasStrings){
        [sysPasteboard.strings enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if([obj containsString:@"ALIBC2017AFC"]){
                NSDictionary *dicFromPasteboard =[self dictionaryWithString:obj];
                result = dicFromPasteboard[key];
                *stop = YES;
            }
        }];
    }
    return result;
}

//写入剪贴板格式
{"flag":"ALIBC2017AFC","updateDate":${更新时间},${业务key}:${业务数据,map类型}}
//根据业务Key,写入业务数据到剪贴板
-(void)testUIPasteboardBizKey:(NSString*)key data:(NSDictionary*)dic{
    UIPasteboard *sysPasteboard = [UIPasteboard generalPasteboard];
    if(sysPasteboard.hasStrings){
        __block BOOL hasBCDataInPasteboard = NO;
        [sysPasteboard.strings enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if([obj containsString:@"ALIBC2017AFC"]){
                NSDictionary *dicFromPasteboard = [self dictionaryWithString:obj];
                [dicFromPasteboard setValue:dic forKey:key];
                NSString *bizStr =[self stringWithDictionary:dicFromPasteboard];
                NSMutableArray *array = [NSMutableArray arrayWithArray:sysPasteboard.strings];
                [array replaceObjectAtIndex:idx withObject:bizStr];
                sysPasteboard.strings = array;
                hasBCDataInPasteboard = YES;
                *stop = YES;
            }
        }];
        if(!hasBCDataInPasteboard){
            NSString *bizStr = [self stringWithDictionary:@{@"flag":@"ALIBC2017AFC",@"updateDate":[NSDate date],key:dic}];
            sysPasteboard.strings = [sysPasteboard.strings arrayByAddingObject:bizStr];
        }
    }else{
        NSString *bizStr = [self stringWithDictionary:@{@"flag":@"ALIBC2017AFC",@"updateDate":[NSDate date],key:dic}];
        sysPasteboard.strings = [sysPasteboard.strings arrayByAddingObject:bizStr];
    }
}

//以上的方法会覆盖剪贴板中其他类型的数据,比如图片类型,如要完全不覆盖,请使用剪贴板以下API

- (nullable NSData *)dataForPasteboardType:(NSString *)pasteboardType;

- (void)setData:(NSData *)data forPasteboardType:(NSString *)pasteboardType;
相关文章
|
4月前
|
算法 iOS开发 C++
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); 的作用和注意事项
默认情况下,C++的输入输出流与C标准库的输入输出函数是同步的,这会造成一定的性能损失。:使用cin.tie(0)和cout.tie(0)可以取消cin与cout之间的绑定,这意味着在进行输入操作时,不需要强行刷新输出缓冲区。:如果你的程序在输入输出中同时使用了C++的输入输出流和C标准库的输入输出函数(如scanf和printf),则不应该使用这段代码。:在使用了这段代码后,应避免使用C标准库的输入输出函数(如printf和scanf),因为这些函数与输入输出流的同步已被关闭。这段代码的主要用途是。
133 1
|
6月前
|
编解码 Android开发 iOS开发
iOS 上架审核宝典:注意事项与实用工具分享
iOS 上架审核宝典:注意事项与实用工具分享
|
6月前
|
编解码 Android开发 iOS开发
iOS 上架审核宝典:注意事项与实用工具分享
iOS 上架审核宝典:注意事项与实用工具分享
|
编解码 Android开发 iOS开发
iOS上架审核宝典:注意事项与实用工具分享
从事过ios开发、app运营这一行业的朋友都知道,ios app上架审核比较严格的,经常会因为种种原因被拒。这次呢,小微就整理了iOS上架需要注意的事项,上架前尽量避免,争取一次提交审核成功,被拒打回重新修改提交审核会耗费很多时间!
iOS上架审核宝典:注意事项与实用工具分享
|
JavaScript iOS开发
iOS上架之HBuider打包简单项目及注意事项
iOS上架之HBuider打包简单项目及注意事项
|
数据安全/隐私保护 Android开发 iOS开发
2022最新iOS证书(.p12)、描述文件(.mobileprovision)申请和HBuider打包及注意注意事项
2022最新iOS证书(.p12)、描述文件(.mobileprovision)申请和HBuider打包及注意注意事项
|
数据安全/隐私保护 Android开发 开发者
最新iOS证书(.p12)、描述文件(.mobileprovision)申请和HBuider打包及注意注意事项
、在钥匙串界面中,选中安装好的开发者证书,【右键】选择导出 2、在弹出的界面中 3、在接下来的弹窗中填写p12文件的安装密码(后面他人安装该p12文件时需要输入这个密码,重要) 4、继续上面的步骤,这里需要输入电脑的开机密码,p12开发者证书到这里即制作完成。 以上就是p12开发证书制作全过程,p12发布证书制作步骤一样。
|
JavaScript iOS开发
ios上架之​HBuider打包简单项目及注意事项
ios上架之​HBuider打包简单项目及注意事项
91 0
ios上架之​HBuider打包简单项目及注意事项
|
数据安全/隐私保护 Android开发 iOS开发
2022最新iOS证书(.p12)、描述文件(.mobileprovision)申请和HBuider打包及注意注意事项
2022最新iOS证书(.p12)、描述文件(.mobileprovision)申请和HBuider打包及注意注意事项
2022最新iOS证书(.p12)、描述文件(.mobileprovision)申请和HBuider打包及注意注意事项
|
数据安全/隐私保护 Android开发 iOS开发
2022最新iOS证书(.p12)、描述文件(.mobileprovision)申请和HBuider打包及注意注意事项
2022最新iOS证书(.p12)、描述文件(.mobileprovision)申请和HBuider打包及注意注意事项
2022最新iOS证书(.p12)、描述文件(.mobileprovision)申请和HBuider打包及注意注意事项