核心数据:没有为实体 ZZZZ 上的属性 YYYY 找到类名为 XXX 的 NSValueTransformer

问题描述 投票:0回答:2

我在 xcdatamodel 文件中设置了 CoreData 模型。

我的属性 YYYY 具有可转换类型,并且我在数据模型检查器中设置了转换器名称。

我的情况是我在模型中存储了一个

[CLLocation]

class LocationArrayTransformer : NSValueTransformer {


    override func transformedValue(value: AnyObject?) -> AnyObject? {

        let locations = value as! [CLLocation]

        return NSKeyedArchiver.archivedDataWithRootObject(locations)
    }

    override func reverseTransformedValue(value: AnyObject?) -> AnyObject? {

        let data = value as! NSData

        return NSKeyedUnarchiver.unarchiveObjectWithData(data)
    }


}

这是我的价值转换器。

但不知怎的,我仍然在控制台中收到警告:

No NSValueTransformer with class name XXX was found for attribute YYYY on entity ZZZZ

知道为什么吗?

ios swift core-data
2个回答
42
投票

我花了很多时间来不分享我找到的解决方案:

我必须使

NSValueTransformer
子类可供 Objc 使用。

@objc(LocationArrayTransformer)
class LocationArrayTransformer : NSValueTransformer {
 ....
}

就这么简单。


正如 @Sbooth 指出的,Swift 类是命名空间的。使用

@objc
使类无需命名空间即可使用。因此将变压器名称设置为
MyApp.Mytransformer
也很好用!


0
投票

嗯…我现在在 Xcode 15 中收到这个编译警告 - 我不记得以前见过它。它在运行时 100% 正常工作(控制台中没有警告)。

© www.soinside.com 2019 - 2024. All rights reserved.