gpt4 book ai didi

iOS7 NSKeyedArchiver 警告 : replacing existing value for key 'UITintColor' ; probable duplication of encoding keys in class hierarchy

转载 作者:可可西里 更新时间:2023-11-01 04:58:39 38 4
gpt4 key购买 nike

我使用 xib 创建了一个 uitableviewcell。我有一个细胞工厂,其中的细胞以这种方式取消存档:

- (instancetype)initWithNib:(NSString *)aNibName
{
self = [super init];
if (self != nil) {

self.viewTemplateStore = [[NSMutableDictionary alloc] init];
NSArray * templates = [[NSBundle mainBundle] loadNibNamed:aNibName owner:self options:nil];

for (id template in templates) {
if ([template isKindOfClass:[UITableViewCell class]]) {
UITableViewCell * cellTemplate = (UITableViewCell *)template;
NSString * key = cellTemplate.reuseIdentifier;

if (key) {
[self.viewTemplateStore setObject:[NSKeyedArchiver archivedDataWithRootObject:template] forKey:key];
} else {
@throw [NSException exceptionWithName:@"Unknown cell"
reason:@"Cell has no reuseIdentifier"
userInfo:nil];
}
}
}
}
return self;
}

- (UITableViewCell *)cellOfKind:(NSString *)theCellKind forTable:(UITableView *)aTableView
{
UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:theCellKind];

if (!cell) {
NSData * cellData = [self.viewTemplateStore objectForKey:theCellKind];

if (cellData) {
cell = [NSKeyedUnarchiver unarchiveObjectWithData:cellData];
} else {
DDLogError(@"Don't know nothing about cell of kind %@", theCellKind);
}
}
return cell;
}

如果将 UIActivityIndi​​catorView 添加到单元格,则此消息会出现在控制台中:

* NSKeyedArchiver warning: replacing existing value for key 'UITintColor'; probable duplication of encoding keys in class hierarchy

它只发生在 iOS7 中。 UIActivityIndi​​catorView 具有默认值,我只需将其拖放到单元格上即可。

关于为什么会出现此消息的任何线索?

谢谢。

最佳答案

这是 iOS7 引入的错误。

您正在调用 [NSKeyedArchiver archivedDataWithRootObject:template] ,这导致整个 View 层次结构被归档(使用过程 encodeWithCoder: )。

引起警告的问题是 UIActivityIndicatorViewUIView 的子类, 这也符合 <NSCoding>协议(protocol)。在 iOS7 之前,导航栏、事件指示器等 View 都有其 Tint 属性,但在 iOS7 中,Tint 属性存在于 UIView 中。本身。因此,UIViewActivityIndi​​cator 及其祖先 UIView 都将此 Tint 属性编码为 UITintColor。键,首先由 UIView 设置然后被 UIActivityIndicatorView 覆盖.这就是出现此警告的原因。无需担心。

顺便说一句,你为什么要使用如此奇怪的代码来生成单元格?您可以在 viewDidLoad 中将所有 reuseIdentifiers 注册到适当的 Nib:

[self.tableView registerNib:[UINib nibWithNibName:@"Cells" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"cell1"];

然后 tableView 本身将在您调用时加载一个单元格

[tableView dequeueReusableCellWithIdentifier:@"cell1" forIndexPath:indexPath];

关于iOS7 NSKeyedArchiver 警告 : replacing existing value for key 'UITintColor' ; probable duplication of encoding keys in class hierarchy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21314463/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com