核心数据:没有为实体 ZZZZ 上的属性 YYYY 找到类名为 XXX 的 NSValueTransformer
Posted
技术标签:
【中文标题】核心数据:没有为实体 ZZZZ 上的属性 YYYY 找到类名为 XXX 的 NSValueTransformer【英文标题】:Core Data : No NSValueTransformer with class name XXX was found for attribute YYYY on entity ZZZZ 【发布时间】:2015-09-15 23:03:13 【问题描述】:我在 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
知道为什么吗?
【问题讨论】:
【参考方案1】:我花了很多时间才没有分享我找到的解决方案:
我必须使 NSValueTransformer
子类对 Objc 可用。
@objc(LocationArrayTransformer)
class LocationArrayTransformer : NSValueTransformer
....
就这么简单。
正如@Sbooth 所指出的,Swift 类是命名空间的。使用@objc
使类在没有命名空间的情况下可用。所以将转换器名称设置为MyApp.Mytransformer
也很有效!
【讨论】:
Swift 类是命名空间的,使用@objc
可以使类在没有任何命名空间的情况下可用。如果您通过 Swift 模块名称(通常是您的应用程序的名称)和类:MyCoreDataApp.LocationArrayTransformer
来识别该类,则该类应该在 objc 中可用。
像魅力一样工作!感谢您的提醒!
我最好不要问你花了多少时间来找到这个解决方案,但我可以告诉你,你为我节省了很多。谢谢
正是@objc(LocationArrayTransformer)
解决了问题。谢谢
感谢 2022 年)来自第一个谷歌链接的回答,这些天来的稀有野兽。 )以上是关于核心数据:没有为实体 ZZZZ 上的属性 YYYY 找到类名为 XXX 的 NSValueTransformer的主要内容,如果未能解决你的问题,请参考以下文章