【问题标题】:Set enum value to core data object将枚举值设置为核心数据对象
【发布时间】:2016-02-15 15:42:59
【问题描述】:

我有一个核心数据对象:

@objc enum ProductType:Int32 {
    case One
    case Two
}

class Product: NSManagedObject {

    @NSManaged var productType:ProductType
}

我在这里读到了这个:Swift: Storing states in CoreData with enums

然后我要创建对象:

product = NSEntityDescription.insertNewObjectForEntityForName("Product", inManagedObjectContext: appDelegate.managedObjectContext) as! Product

product.setValue(ProductType.One, forKey: "productType")

但是编译器说:

无法将“”类型的值转换为预期的参数类型“AnyObject?”

我怀疑这是使用枚举的正确解决方案...

【问题讨论】:

    标签: ios swift core-data enums


    【解决方案1】:

    如果你想通过setValue(: forKey:)设置属性,值必须符合AnyObject;因此,您可以将枚举更改为 NSNumber,例如。 NSNumber(int: ProductType.Two.rawValue)

    如果你想直接通过enum ProductType设置属性,实现自定义setter和getter可以有这个功能。请参考以下Product类:

    class Product: NSManagedObject {
        @NSManaged var productType: NSNumber?
    
        // For Option 3 by adding a ProductType property
        var type: ProductType {
            get {
                return ProductType(rawValue: self.productType!.intValue)!
            }
            set {
                self.productType = NSNumber(int:newValue.rawValue)
            }
        }
    }
    
    let product = NSEntityDescription.insertNewObjectForEntityForName("Product", inManagedObjectContext: self.managedObjectContext) as! Product
    // Option 1: Set productType via setValue(:forKey:)
    product.setValue(NSNumber(int: ProductType.Two.rawValue), forKey: "productType")
    // Option 2: Set productType directly
    product.productType = NSNumber(int: ProductType.Two.rawValue)
    // Option 3: set productType via an extra ProductType property
    product.type = ProductType.Two
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      相关资源
      最近更新 更多