NSManagedObject.setValue(值:AnyObject?,forKey key:String)在Swift 2.0中导致错误

时间:2015-10-10 12:50:47

标签: swift2

我有这段代码在XCode6(Swift 1.2)中运行正常,但没有使用Swift 2:

class func findOrCreate<T: NSManagedObject>(type: T.Type, attribute: String, value: AnyObject?) -> T {
    if let object = T.MR_findFirstByAttribute(attribute, withValue: value) as? T {
        return object
    } else {
        let object = T.MR_createEntity() as! T
        if let value:AnyObject = value {
            object.setValue(value, forKey: attribute)
        }
        return object
    }
}

错误显示在包含 object.setValue 的行上,并显示以下消息:

模糊地使用&#39; setValue(_:forKey :)&#39;

我认为它无法识别NSManagedObject类型的对象,但我不是100%肯定,任何线索为什么会发生这种情况。

2 个答案:

答案 0 :(得分:6)

我在Apple论坛上发布了相同的问题并得到了解决此问题的解决方法:

      let object = T.MR_createEntity() as! NSManagedObject
      if let value:AnyObject = value {   
           object.setValue(value, forKey: attribute)   
      }   
      return object as! T

这可以按预期工作。我也向Apple提交了一份错误报告。

答案 1 :(得分:4)

另一种可能的解决方案是:

(object as NSManagedObject).setValue(value, forKey: attribute)