1

我有以下一段代码

protocol JsonParseDescriptor {
 //some required methods
   func parsePrimitives() {
}

extension JsonParseDescriptor where Self: NSManagedObject {
   func parsePrimitives() {
      self.setValue(1, forKey: "id") //this throws an error in swift stating Ambiguous use of setValueForKey
      self.setValue(1, forKey: "id") //this does not throw any compile-time error
   }

}

任何想法为什么 setValue:ForKey: 会导致此错误?有趣的是, setValue:ForKeyPath: 不会导致这个问题。我只是害怕使用后者,因为它会导致任何副作用,并且除了 setValue:ForKey: 有什么想法吗?

4

1 回答 1

0

这是我的代码导致了这个错误。

func create<U : NSManagedObject>(entityName : String, primaryKey : String, value : AnyObject) -> U {
    let created : U = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext: providedContext) as! U
    created.setValue(value, forKey: primaryKey)
    return created
}

这是创建它的代码:

func create<U : NSManagedObject>(entityName : String, primaryKey : String, value : AnyObject) -> U {
    let created = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext: providedContext)
    created.setValue(value, forKey: primaryKey)
    return created as! U
}

我的猜测是编译器(或静态分析器)无法确定动态调度应该路由到哪里。或者也许这只是一个错误。

无论哪种方式,我希望这种解决方法有所帮助。

于 2016-05-09T22:41:57.767 回答