具有自定义值转换器的版本化核心数据模型的警告

Warning for Versioned Core Data Model with Custom Value Transformer

提问人:Michael Hulet 提问时间:10/24/2023 最后编辑:Michael Hulet 更新时间:10/24/2023 访问量:62

问:

在我的应用中,我有一个核心数据模型,其中包含一些实体,这些实体的属性具有使用我定义的自定义值的转换值。例如,从 Apple 的示例代码中:NSSecureUnarchiveFromDataTransformer

class ColorToDataTransformer: NSSecureUnarchiveFromDataTransformer {
    
    override class func allowsReverseTransformation() -> Bool {
        return true
    }
    
    override class func transformedValueClass() -> AnyClass {
        return UIColor.self
    }
    
    override class var allowedTopLevelClasses: [AnyClass] {
        return [UIColor.self]
    }

    override func transformedValue(_ value: Any?) -> Any? {
        guard let data = value as? Data else {
            fatalError("Wrong data type: value must be a Data object; received \(type(of: value))")
        }
        return super.transformedValue(data)
    }
    
    override func reverseTransformedValue(_ value: Any?) -> Any? {
        guard let color = value as? UIColor else {
            fatalError("Wrong data type: value must be a UIColor object; received \(type(of: value))")
        }
        return super.reverseTransformedValue(color)
    }
}

extension NSValueTransformerName {
    static let colorToDataTransformer = NSValueTransformerName(rawValue: "ColorToDataTransformer")
}

这作为属性的转换器包含在数据模型中:

Screenshot of the attribute editor in Xcode, showing a property whose type is transformable, with its transformer set to ColorToDataTransformer

但是,当我通过选择 添加新的模型版本时,会出现一条警告,指出:Editor > Add Model Version…

no NSValueTransformer with class name 'ColorToDataTransformer' was found for attribute 'tintColor' on entity 'Book'

这是一个编译时警告,而不是运行时控制台日志,因为我过去曾看到过对该消息的引用

尽管没有进行其他代码更改,但仍未进行其他代码更改。我将如何更正我的代码/模型,使警告消失?请注意,我已经尝试了以下各项:

  • 将 on 属性设置为ModuleCurrent Product Module
  • 定义方式ColorToDataTransformer@objc(ColorToDataTransformer)
  • 将生成设置设置为Suppress all momc warningsYes

然而,这些都没有使警告消失。我目前正在开发一个面向 iOS 16.4 并使用 Xcode 15.0.1 (15A507) 的应用程序

iOS Swift Xcode 核心数据

评论


答: 暂无答案