Solo per aggiungere a questo, perché stavo ottenendo anche questo errore. Passare attraverso tutte queste risposte sembra valere soprattutto per lavorare con l'interfaccia utente e le cose dello storyboard. So che il poster originale sembrava funzionare con l'interfaccia utente, ma quando si cercano possibili motivi per questo errore, per lo più tutte le domande riconducono a questa domanda con quelle altre chiuse come duplicati o semplicemente avendo problemi a collegare le cose in uno storyboard, quindi lo farò aggiungi la mia soluzione.
Stavo lavorando alla codifica di un servizio Web in Swift 2. Avevo creato tutti gli oggetti proxy e gli stub necessari. Mentre scorrevo attraverso l'XML restituito, creavo un'istanza dinamica dei miei oggetti, che provenivano tutti NSObject
e setValue:forKey
li utilizzavo . Ogni volta che ha setValue:forKey
tentato di impostare una proprietà, è saltato in aria con questo errore.
Ho avuto un'istruzione switch per ogni tipo con cui avevo a che fare (ad es Bool?
. CShort?
, String?
) E per ogni nodo XML ho esaminato quale tipo era sull'oggetto, quindi ho convertito il valore in quel tipo e ho provato a impostarlo setValue:forKey
.
Alla fine ho iniziato a commentare tutte queste setValue:forKey
righe e ho scoperto che il mio default
caso dell'istruzione switch ha funzionato String?
.
Ho finalmente capito che non è possibile utilizzare tipi rapidi opzionali con a setValue:forKey
meno che non abbiano una mappatura diretta su un tipo Objective-C come String?
o NSNumber?
. Ho finito per cambiare tutti i CShort?
tipi in NSNumber?
dato che ha una mappatura diretta. Per Bool?
nel mio caso è andato tutto bene per me solo l'uso Bool
e inizializzare a false
. Altri potrebbero non avere quel lusso.
Ad ogni modo, che mal di testa è stato così spero che questo aiuti qualcun altro che ha un problema simile e continua a essere reindirizzato a questa domanda e dicendo a se stesso: "Non sto facendo nulla nell'interfaccia utente !!".
Quindi, infine, per ripetere ancora una volta la codifica valore-chiave non funziona con gli optional. Di seguito ho finito per trovare un posto, ma ho dimenticato dove, quindi, a chiunque abbia pubblicato questo mi scuso e darei credito se mi ricordassi dove l'ho trovato, ma mi ha salvato la vita:
Non è possibile utilizzare KVC su una proprietà Int opzionale, poiché KVC è Cocoa / Objective-C e Objective-C non è in grado di visualizzare un Int opzionale - non è collegato a Objective-C. Objective-C può vedere solo i tipi collegati a Objective-C:
tipi di classe derivati da NSObject
tipi di classe esposti con @objc
Strutture veloci che sono collegate a ponte