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

Mat*_*ler 8 core-data ios swift

我将我的CoreData模型设置在xcdatamodel文件中.

我的属性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)
    }


}
Run Code Online (Sandbox Code Playgroud)

那是我的价值变换器.

但不知何故,我仍然在控制台中收到警告: No NSValueTransformer with class name XXX was found for attribute YYYY on entity ZZZZ

任何想法为什么?

Mat*_*ler 29

我花了很多时间来分享我发现的解决方案:

我必须让NSValueTransformer子类可用于Objc.

@objc(LocationArrayTransformer)
class LocationArrayTransformer : NSValueTransformer {
 ....
}
Run Code Online (Sandbox Code Playgroud)

就那么简单.


正如@Sbooth指出的那样,Swift类是命名空间的.使用@objc不使用命名空间使类可用.因此,设置变压器名称MyApp.Mytransformer也很有效!

  • Swift类是命名空间的,使用`@objc`使类可用而没有任何命名空间.如果您通过Swift模块名称(通常是您的应用程序名称)和类:`MyCoreDataApp.LocationArrayTransformer`识别它,则该类应该在objc中可用. (4认同)