【发布时间】:2021-08-18 22:47:02
【问题描述】:
是否可以使用 NSSecureCoding 将 UIView 写入磁盘。下面的代码会导致错误。
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object requiringSecureCoding:YES error:&error];
错误:由于格式不正确,无法写入数据。
我们还尝试了以下方法:
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initRequiringSecureCoding:YES];
[archiver encodeObject:view forKey:@"view"];
[archiver finishEncoding];
错误:此解码器将仅解码采用 NSSecureCoding 的类。 'UIView' 类不采用它。
【问题讨论】:
-
为什么要对 UIView 进行安全编码?据我了解,不安全编码的问题是,取消归档程序会构建一个对象图,该对象图可以转换为其他东西,让您以不需要的方式检查数据。我无法想象这种情况适用于 UIView。但也许您必须使用安全编码,因为它是必需的,例如 CoreData 中的 Transformable 属性。如果是这样,也许您可以不安全地将您的 UIView 归档到 NSData 对象,然后安全地编码 NSData 对象?我知道这是一个 hack,我不知道它是否有效,但我没有其他想法。
-
嗨莱因哈德,感谢您的回复。确切地说,我们需要使用安全编码,因为它是必需的。我们尝试使用安全编码归档和取消归档包含 UIIView 对象的可变数组。不幸的是,将 UIView 归档到 NSData 不起作用,并返回数据格式不正确的错误。
标签: nskeyedarchiver nssecurecoding