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

添加Core Data模型版本时自定义Value Transformer警告问题

解决Core Data自定义转换器模型版本警告的方法
  • 提前注册转换器类
    模型编译工具momc生成模型版本文件时需要找到转换器类,因此要在应用启动、加载Core Data容器前完成转换器注册。在App结构体(SwiftUI)或AppDelegate的初始化方法中添加注册代码:

    ColorToDataTransformer.register()
    

    确保这段代码在NSPersistentContainer初始化之前执行。

  • 校验所有模型版本的属性配置
    打开新添加的模型版本,确认tintColor属性的以下配置:

    • Transformer类名完全匹配ColorToDataTransformer(大小写一致)
    • Module设置为Current Product Module
      同时检查旧模型版本的同名属性配置是否一致,避免版本间配置差异导致警告。
  • 清理缓存并重新构建

    1. 执行Product > Clean Build Folder(快捷键:Shift+Command+K)
    2. 打开Xcode > Settings > Locations,找到Derived Data路径并手动删除整个文件夹
    3. 重启Xcode后重新编译项目,消除缓存导致的类未识别问题。
  • 确认转换器类实现规范
    确保转换器类符合NSSecureUnarchiveFromDataTransformer的要求:

    @objc(ColorToDataTransformer)
    class ColorToDataTransformer: NSSecureUnarchiveFromDataTransformer {
        override class var allowedTopLevelClasses: [AnyClass] {
            return [UIColor.self]
        }
    
        static func register() {
            let transformerName = NSValueTransformerName(rawValue: String(describing: Self.self))
            NSValueTransformer.setValueTransformer(Self(), forName: transformerName)
        }
    }
    

    重点确认@objc标注的类名与模型中填写的完全一致,且allowedTopLevelClasses包含你要归档的类型(比如UIColor)。

  • 调整编译顺序依赖
    在项目的Build Phases > Compile Sources中,将ColorToDataTransformer.swift文件移到Core Data模型文件(.xcdatamodeld)的上方,确保编译器先编译转换器类,再处理模型文件。

内容的提问来源于stack exchange,提问作者Michael Hulet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:03:10