Nur um das hinzuzufügen, weil ich auch diesen Fehler bekommen habe. Das Durchgehen all dieser Antworten scheint sich am meisten auf die Arbeit mit der Benutzeroberfläche und dem Storyboard zu beziehen. Ich weiß, dass das Originalposter anscheinend mit der Benutzeroberfläche funktioniert hat, aber bei der Suche nach möglichen Gründen für diesen Fehler führen meistens alle Fragen auf diese Frage zurück, wobei die anderen als Duplikate geschlossen werden oder einfach Probleme beim Verbinden von Dingen in einem Storyboard haben füge meine Lösung hinzu.
Ich habe an der Codierung eines Webdienstes in Swift 2 gearbeitet. Ich hatte alle erforderlichen Proxy-Objekte und Stubs erstellt. Während ich das zurückgegebene XML durchlief, instanziierte ich dynamisch meine Objekte, die alle von ihnen stammten NSObject
und setValue:forKey
auf ihnen verwendet wurden. Jedes MalsetValue:forKey
, versucht wurde, eine Eigenschaft festzulegen, wurde dieser Fehler angezeigt.
Ich hatte eine switch - Anweisung für jeden Typen , mit dem ich zu tun (zB Bool?
, CShort?
, String?
) und für jeden XML - Knoten Ich ging durch und überprüft , was der Typ auf dem Objekt war und dann den Wert in diesem Typ konvertierte und versuchte , es zu setzen mit setValue:forKey
.
Schließlich fing ich an, all diese setValue:forKey
Zeilen zu kommentieren und stellte fest, dass mein default
Fall für switch-Anweisungen funktionierte String?
.
Ich habe schließlich herausgefunden, dass Sie keine optionalen schnellen Typen verwenden können, es setValue:forKey
sei denn, sie haben eine direkte Zuordnung zu einem Objective-C-Typ wie String?
oder NSNumber?
. Am Ende habe ich alle CShort?
Typen geändert, NSNumber?
da dies eine direkte Zuordnung hat. Denn Bool?
in meinem Fall war es für mich in Ordnung, nur die Verwendung Bool
und initialisieren es false
. Andere haben diesen Luxus vielleicht nicht.
Wie auch immer, was für Kopfschmerzen das hoffentlich jemand anderem hilft, der ein ähnliches Problem hat und immer wieder zu dieser Frage weitergeleitet wird und sich sagt: "Ich mache nichts in der Benutzeroberfläche !!".
Wenn Sie also noch einmal wiederholen, funktioniert die Schlüsselwertcodierung nicht mit Optionen. Unten habe ich irgendwo etwas gefunden, aber ich vergesse, wo ich mich bei jedem, der dies gepostet hat, entschuldige und würde es gutschreiben, wenn ich mich daran erinnere, wo ich das gefunden habe, aber es hat mein Leben gerettet:
Sie können KVC nicht für eine optionale Int-Eigenschaft verwenden, da KVC Cocoa / Objective-C ist und Objective-C kein optionales Int sehen kann - es ist nicht mit Objective-C verbunden. Objective-C kann nur Typen sehen, die mit Objective-C verbunden sind:
Klassentypen, die von NSObject abgeleitet sind
Klassentypen, die mit @objc verfügbar gemacht werden
Schnelle Strukturen, die überbrückt werden