Ich versuche eine generische NSCoding-Implementierung durchzuführen und habe ein Problem mit der Decodierung, wenn sich der Objekttyp aufgrund einer neueren Version der App inzwischen geändert hat.So rufen Sie die validateValue-Methode auf
Ich habe ein Problem mit dem Aufruf der validateValue-Methode von Swift. Die Funktion Signatur ist:
func validateValue(_ ioValue: AutoreleasingUnsafeMutablePointer<AnyObject?>, forKey key: String, error outError: NSErrorPointer) -> Bool
Als Referenz kann der Apple-Dokumentation finden Sie hier: NSCoding validateValue
Der Code, den ich erstellen möchten ist:
public class func decodeObjectWithCoder(theObject:NSObject, aDecoder: NSCoder) {
for (key, value) in toDictionary(theObject) {
if aDecoder.containsValueForKey(key) {
let newValue: AnyObject? = aDecoder.decodeObjectForKey(key)
NSLog("set key \(key) with value \(newValue)")
var error:NSError?
var y:Bool = theObject.validateValue(newValue, forKey: key, error: &error)
if y {
theObject.setValue(newValue, forKey: key)
}
}
}
}
Ich kann nicht Der Aufruf von .validateValue ist korrekt. Ich bekomme immer Kompilierfehler. Wie soll ich es nennen?EVReflection
Update:: Die ToDictionary Funktion finden Sie unter Ich habe gerade herausgefunden, dass dieser Code nicht kompiliert:
var ioValue: AutoreleasingUnsafeMutablePointer<AnyObject?> = nil
var y:Bool = theObject.validateValue(ioValue, forKey: key, error: nil)
, welche Art ist von ANYOBJECT Dies würde bedeuten, dass der Wert? konnte nicht an AutoreleasingUnsafeMutablePointer übergeben werden