Z powodzeniem używam metody setValue(value, forKey: key)
w mojej podklasie Swift NSObject zgodnej z NSKeyValueCoding.Korzystanie z setValue (value, forKey: key) na Int? typy uruchamia metodę niezgodną z kodowaniem kodu kluczowego
Działa to doskonale na urządzeniach typu String, np.
var name:String?
Jednak na optionals int, to się nie powiedzie, wyzwalając niezdefiniowanej metody kluczową że mam przesłonić dla celów debugowania:
override func setValue(value: AnyObject!, forUndefinedKey key: String!) {
println("\(self) this class is not key value coding-compliant for the key \(key)")
}
Tak na przykład klucz myId
z dobrą wartość całkowitą by wywołaj niezdefiniowaną metodę klucza powyżej.
var myId:Int?
Jeśli zmienić powyższą definicję, aby nie być opcjonalne, a następnie wszystko działa poprawnie:
var myId:Int = 0
Z myId
jako opcjonalny, próbowałem absolutnie wszystko mogę myśleć na drodze rzutowanie, rozpakowywanie, inicjowanie i tak dalej. Po prostu nie widzi klasy jako wartości kluczowej zgodnej z tymi wartościami liczbowymi.
Wiem, że jest to dobra wartość liczbowa. Zmiana deklaracji var na String? awarie. także wygląda to dobrze w lldb:
Printing description of key:
myId
key NSObject 0x00007fb8d530ca20 0x00007fb8d530ca20
k NSString "myId" 0x00007fa2aa942f20
value __NSCFNumber * Int64(4348129) 0xb000000004258e13
Printing description of value:
4348129
(lldb)
Więc pytanie jest, czy ktoś wykorzystane - w Swift - metoda NSKeyValueCoding setValue(value, forKey: key)
na typ Int z powodzeniem?
Może to być spowodowane Int jest typu Any i nie AnyObject. Próbowałem parsować obiekt do słownika iz powrotem i miałem podobne problemy. Zobacz https://github.com/evermeer/EVCloudKitDao/blob/master/AppMessage/AppMessage/CloudKit/EVReflection.swift Możesz zobaczyć, że próbowałem parsować Any na AnyObject. Wartości nulla są nadal problemem, ale działa na Int. –