You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS15中NSKeyedUnarchiver出现missingInAllowedClasses警告如何解决?

自定义DataTransformer在Xcode 13/iOS 15出现missingAllowedClasses警告处理

问题现象

Xcode 13与iOS 15环境下使用自定义DataTransformers时,会触发missingAllowedClasses相关警告,警告内容如下:

[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类型未被纳入允许列表,苹果提示该兼容逻辑后续会被强制禁止,未修复的话后续系统版本会直接触发崩溃。

解决方法

修改自定义DataTransformer中的解档代码,将所有解档过程中会用到的类全部加入允许类集合:

  1. 原本错误的单类指定写法示例:
// 仅指定了NSArray,未包含数组内部的NSString类型,会触发警告
NSArray *result = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSArray class] fromData:rawData error:nil];
  1. 修正后的多类集合写法示例:
// 把所有会用到的类都加入允许集合
NSSet *allowedClasses = [NSSet setWithObjects:
    [NSArray class],
    [NSString class],
    // 如果还有其他用到的类型比如NSNumber、NSDictionary、自定义模型类等,继续往下添加即可
nil];
NSArray *result = [NSKeyedUnarchiver unarchivedObjectOfClasses:allowedClasses fromData:rawData error:nil];

注意:如果解档内容存在多层嵌套,所有层级涉及到的所有类都需要加入allowedClasses集合,否则依然会触发对应类的缺失警告。

内容的提问来源于stack exchange,提问作者Tom GODDARD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 08:24:08