如何在核心数据中保存和检索通用测量?
我要做的是保存一个Measurement<UnitMass>或一个Measurement<UnitVolume>。
在下图中可以看到,CoreData被设置为接受通用Measurement<Unit>

然而,当我去设置度量的值时,我得到了一个错误。说我不被允许这么做。我认为泛型的目的是支持这样的用法。
我遗漏了什么?

发布于 2018-01-30 23:42:21
关于不匹配类型的错误不是这里的重要部分。真正的问题是,可转换属性只适用于符合NSCoding的类,或者您为其编写了自定义值转换器的类。由于Measurement不是一个类,也不符合NSCoding,所以不能将其与transformable属性一起使用。
你的选择是
Measurement、保存其值以及从Measurement进行转换。ValueTransformer的自定义子类,用于在Measurement和save之间进行转换我选择#1。你可以在你的托管对象子类上添加方便的方法来处理转换。
更新:使用您的Measurement<UnitMass>案例,我会这样做:
massValue.Double属性,该属性是一个名为massUnit的可转换属性,具有自定义类UnitMass (如下所示)。设servingMeasure =测量(value:500,unit:.grams) myObject.massValue = servingMeasure.value myObject.massUnit = servingMeasure.unit
if let单位=测量{ let = myObject.massValue让测量=测量( value :value,unit: unit ) print(“测量:(测量)”) }
下面是massUnit属性的配置方式:

发布于 2018-03-22 19:52:43
在Swift中,测量采用可编码协议,因此可以通过可转换属性将其保存在核心数据中。
你得到的错误实际上是非常清楚的。不能将特定的测量类型Measurement<UnitMass>保存为核心数据中的泛型类型Measurement<Unit>。你也不能在主代码中这样做。修复很简单,对于每个属性,将该属性的特定类型指定为Custom Class。
https://stackoverflow.com/questions/48522897
复制相似问题