2015-10-10 2 views
6

ich dieses Stück Code haben, die in XCode6 (Swift 1.2) funktionierte ok, aber nicht mit der Swift 2:NSManagedObject.setValue (Wert: ANYOBJECT ?, forKey key: String) verursacht Fehler in Swift 2.0

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 
    } 
} 

Fehler zeigt auf der Linie object.setValue mit der Nachricht enthalten:

mehrdeutige Verwendung von "setValue (_: forKey :)

ich denke, es ist Objekt nicht erkennt von NSMA zu sein nagedObject-Typ, aber ich bin mir nicht 100% sicher, jede Ahnung, warum dies passiert sehr geschätzt.

Antwort

6

Ich habe dieselbe Frage auf Apple-Forum veröffentlicht und bekam eine Antwort mit einer Abhilfe für dieses Problem:

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

Dies funktioniert wie erwartet. Ich habe einen Fehlerbericht an Apple gesendet.

+0

gute Arbeit, ich in das gleiche Problem lief, und Ihren Kommentar half mir aus! Aktualisieren Sie hier auf die Auflösung des Bugs von Apple. Vielen Dank! –

4

Eine weitere mögliche Lösung ist dies:

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

Danke! Heute bin ich auch auf dasselbe Problem gestoßen. Dieser Fehler existiert weiterhin mit Xcode 7.3.1. – Buju