我有这段代码在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%肯定,任何线索为什么会发生这种情况。
答案 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)