如何解决iOS 15 警告:NSKeyedUnarchiver _warnAboutPlistType:missingInAllowedClasses:
Xcode 13 和 iOS 15 开始在使用自定义 DataTransformers 时发出有关 missingAllowedClasses 的警告。关于自定义 DataTransformers 的文档很少,所以我想我会在这里发布一个问题并回答它。
[general] *** -[NSKeyedUnarchiver _warnAboutPlistType:missingInAllowedClasses:] allowed unarchiving safe plist type ''NSString' (0x1dc9a7660) [/System/Library/Frameworks/Foundation.framework]',even though it was not explicitly included in the client allowed classes set: '{(
"'NSArray' (0x1dc99c838) [/System/Library/Frameworks/CoreFoundation.framework]"
)}'. This will be disallowed in the future.
在警告消息中注意,它指定了“NSArray”和缺少类型“NSString”。
解决方法
这是一个收到新警告的数组值转换器,但自从添加 NSString 后不再这样做:
// 1. Subclass from `NSSecureUnarchiveFromDataTransformer`
@objc(ArrayValueTransformer)
final class ArrayValueTransformer: NSSecureUnarchiveFromDataTransformer {
static let name = NSValueTransformerName(rawValue: String(describing: ArrayValueTransformer.self))
// 2. Make sure `NSArray` is in the allowed class list. However,since the array can also contain strings,be sure to include NSString.self in the allowedTopLevelClasses
override static var allowedTopLevelClasses: [AnyClass] {
return [NSArray.self,NSString.self] // Added NSString.self here to fix warning
}
/// Registers the transformer.
public static func register() {
let transformer = ArrayValueTransformer()
ValueTransformer.setValueTransformer(transformer,forName: name)
}
}
如果使用以下命令,您还可以使警告静音:
return try? NSKeyedUnarchiver.unarchivedObject(ofClasses:from:)
通过将 allowedTopLevelClasses
的返回中指定的相同数组传递给 ofClasses
参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。