1

я следующий кусок коданеоднозначное использование setValueForKey в скор Core Data КВО в стесненном расширения протокола

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: любые идеи?

+0

Я получаю то же сообщение. Это действительно случайно. – Holly

ответ

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 
} 

Я думаю, что компилятор (или статический анализатор) не может определить, где динамический диспетчерская должен быть проложен. Или, может быть, это просто ошибка.

В любом случае, я надеюсь, что это поможет.