将结构作为核心数据实体的属性

时间:2017-12-06 15:30:01

标签: ios swift core-data

在我的核心数据模型中,我有一个实体,其属性是一个结构。这是结构

struct Range: NSCoding {
    let minValue: Int
    let maxValue: Int

/* implementations of
    required init?(coder: NSCoder) 
   and
     func encode(with aCoder: NSCoder)
*/
}

为了简洁起见,让我们想象一个像这样的实体:

 Question
    -title: String
    -range: Range

我知道range属性需要是数据模型中的Transformable。

当尝试将Range指定为可转换的类时,我得到Property cannot be marked @NSManaged because its type cannot be represented in Objective-C错误

正确的设置是什么?

更具体地说,Xcode编辑器中以下属性的正确值是什么?

  • Value Tranformer
  • 自定义类(我尝试将其设置为范围)
  • 模块(当前设置为“当前模块”)

谢谢!

1 个答案:

答案 0 :(得分:1)

我会将 select a1, a2, unnest(array[a3,a4,a5,a6,a7]) from X minValue保存为实体中的maxValue

Int32

如果结构使用简单版本(因为@NSManaged var minValue: Int32 @NSManaged var maxValue: Int32 无论如何都不支持结构)

NSCoding

struct Range { let min: Int let max: Int } (sub)类中的计算属性,用于将两个属性映射到NSManagedObject对象

Range

或忘记结构并使用真实的var range : Range { get { return Range(min: Int(minValue), max: Int(maxValue)) } set { minValue = Int32(newValue.min) maxValue = Int32(newValue.max) } }

Range

考虑var range : Range<Int> { get { return Range<Int>(uncheckedBounds: (Int(minValue), Int(maxValue))) } set { minValue = Int32(newValue.lowerBound) maxValue = Int32(newValue.upperBound) } } 使用半开放式:Range<T>包含0..<301

修改

如果范围应该是可选的,那么如果2&gt;您可以识别有效范围。例如maxValue

minValue