Sto utilizzando con successo il metodo setValue(value, forKey: key)
nella sottoclasse Swift NSObject compatibile con NSKeyValueCoding.Utilizzo di setValue (valore, forKey: chiave) su Int? tipi attiva metodo di codifica senza valore chiave
Ciò funziona perfettamente su opzioni di stringa, ad es.
var name:String?
Tuttavia, in optional Int, viene a mancare, innescando il metodo chiave indefinita che ho ignorato per il debugging:
override func setValue(value: AnyObject!, forUndefinedKey key: String!) {
println("\(self) this class is not key value coding-compliant for the key \(key)")
}
Così, per esempio, una chiave di myId
con un buon valore intero sarebbe attivare il metodo chiave non definito sopra.
var myId:Int?
Se cambio la definizione di cui sopra per essere non-optional, poi tutto funziona bene:
var myId:Int = 0
Con myId
come optional, ho provato assolutamente tutto quello che mi viene in mente nel modo di casting, unwrapping, inizializzazione e così via. Semplicemente non vede la classe come valore chiave compatibile per quei valori numerici.
So che è un buon valore numerico. Cambiando la dichiarazione var in stringa? si blocca. Sembra anche bene in 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)
Quindi, la domanda è, qualcuno ha utilizzato - a Swift - il metodo NSKeyValueCoding setValue(value, forKey: key)
su un tipo Int successo?
Questo potrebbe essere dovuto al fatto Int è di tipo Qualsiasi e non ANYOBJECT. Ho provato l'analisi di un oggetto in un dizionario e ritorno e ho avuto problemi simili. Vedere https://github.com/evermeer/EVCloudKitDao/blob/master/AppMessage/AppMessage/CloudKit/EVReflection.swift Si può vedere che ho provato ad analizzare Any to a AnyObject. I valori Nullable sono ancora un problema, ma funziona su un Int. –