ios - 如何使用 NSKeyedArchiver 在 iOS 中复制按钮
问题描述
要复制一个按钮,这一直工作正常:
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject: btn];
UIButton *newButton = [NSKeyedUnarchiver unarchiveObjectWithData: archivedData];
但是从 iOS12 开始,这已被弃用。但是使用建议的方法会导致 newButton 为零。我做错了什么或者确实有另一种方法来复制 UIButton。完整代码:
// Init originalBtnsArray and
originalBtnsArray = [[NSMutableArray alloc]init];
// Populate originalBtnsArray
for (UIButton *btn in btnsReferencesArray){
// Below works but is now deprecated as of iOS 12
//NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject: btn];
//UIButton *newButton = [NSKeyedUnarchiver unarchiveObjectWithData: archivedData];
NSError* error = nil;
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:btn requiringSecureCoding:NO error:&error];
NSError* unArchiveError = nil;
UIButton *newButton = [NSKeyedUnarchiver unarchivedObjectOfClass:[UIButton class] fromData:archivedData error:&unArchiveError];
// newButton is nil, which is suboptimal
[originalBtnsArray addObject:newButton];
}
解决方案
现在开始工作了:
UIButton *newButton = [[UIButton alloc]init];
newButton.frame = btn.frame;
[originalBtnsArray addObject:newButton];
推荐阅读
- dpdk - DPDK 17.11.1 - drops seen when doing destination based rate limiting
- c# - ElasticSearch PostData 序列化插入不起作用
- python - 如何根据键值将键控 RDD 划分为 2 个分区
- python - discord python bot获取用户输入
- java - 弹簧数据 aerospike | 在整个事务回滚的情况下如何实现回滚
- wso2 - WSo2 API Manager In Sequence 使用 Call Mediator 调用一个返回空 JSON 有效负载响应但在响应标头中的值的 REST API
- c# - 此请求的身份验证已被拒绝
- python - 在 python 程序中使用交换空间是个好主意吗?
- pytorch - 为什么不使用 torch.cuda.empty_cache() 释放 CUDA 内存
- c - 处理字符时出现分段错误