CoreData Transformable编译警告:未找到NSValueTransformer,求解决方案
解决CoreData "no NSValueTransformer was found" 警告的步骤
手动注册Value Transformer
在App启动入口(如AppDelegate的application(_:didFinishLaunchingWithOptions:)或SceneDelegate的scene(_:willConnectTo:options:))添加注册代码,确保CoreData能定位到你的Transformer:func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // 注册Transformer let transformer = AttitudeTransformer() ValueTransformer.setValueTransformer(transformer, forName: NSValueTransformerName("AttitudeTransformer")) return true }注意这里的
"AttitudeTransformer"必须和CoreData模型中配置的Transformer名称完全一致(包括大小写)。核对CoreData模型配置
- 找到对应实体的Transformable类型属性,确认其
Transformer字段填写的名称与Transformer类的@objc名称或注册名称完全匹配 - 确保属性的
Type设置为Transformable,不要选错其他类型
- 找到对应实体的Transformable类型属性,确认其
验证Transformer类的实现
确保AttitudeTransformer正确重写allowedTopLevelClasses,包含你的Attitude类:@objc(AttitudeTransformer) class AttitudeTransformer: NSSecureUnarchiveFromDataTransformer { override class var allowedTopLevelClasses: [AnyClass] { return [Attitude.self] } }同时检查
Attitude类的NSSecureCoding实现,确保init?(coder:)和encode(with:)方法正确处理所有需要持久化的属性,无遗漏或错误。清理Xcode缓存并重启
执行Cmd+Shift+K清理Build Folder,完全退出Xcode后重新打开项目编译,避免缓存导致的识别问题。确认@objc标注位置
确保@objc(AttitudeTransformer)直接标注在AttitudeTransformer类的声明上方,不要嵌套在其他修饰符或注释里,示例如下:@objc(AttitudeTransformer) class AttitudeTransformer: NSSecureUnarchiveFromDataTransformer { // 类实现 }
内容的提问来源于stack exchange,提问作者meaning-matters
相关产品推荐
相关产品推荐

