Juste pour ajouter à cela, car je recevais également cette erreur. En parcourant toutes ces réponses, la plupart semblent s'appliquer à l'utilisation de l'interface utilisateur et des éléments du storyboard. Je sais que l'affiche originale semble fonctionner avec l'interface utilisateur, mais lors de la recherche des raisons possibles de cette erreur, la plupart des questions reviennent à cette question, les autres étant fermées en tant que doublons ou ayant simplement des problèmes avec la connexion des choses dans un storyboard, donc je vais ajoutez ma solution.
Je travaillais sur le codage d'un service Web dans Swift 2. J'avais construit tous les objets proxy et stubs nécessaires. Pendant que je parcourais le XML retourné, j'instanciais dynamiquement mes objets, qui provenaient tous de NSObject
et les utilisaient setValue:forKey
. Chaque fois que j'ai setValue:forKey
essayé de définir une propriété, il a explosé avec cette erreur.
J'ai eu une instruction switch pour chaque type que je traitais (par exemple Bool?
, CShort?
, String?
) et pour chaque noeud XML , je suis passé par et vérifié ce que le type était sur l'objet puis converti la valeur à ce type et a tenté de le régler avec setValue:forKey
.
Finalement, j'ai commencé à commenter toutes ces setValue:forKey
lignes et j'ai constaté que mon default
cas de déclaration de commutateur fonctionnait String?
.
J'ai finalement compris que vous ne pouvez pas utiliser de types Swift optionnels à setValue:forKey
moins qu'ils aient un mappage direct vers un type Objective-C comme String?
ou NSNumber?
. J'ai fini par changer tous les CShort?
types en NSNumber?
ayant un mappage direct. Car Bool?
dans mon cas, c'était bien pour moi de simplement l'utiliser Bool
et de l'initialiser false
. D'autres peuvent ne pas avoir ce luxe.
Quoi qu'il en soit, un mal de tête qui, si tout va bien, cela aide quelqu'un d'autre qui a un problème similaire et continue à être redirigé vers cette question et à se dire: "Je ne fais rien dans l'interface utilisateur !!".
Enfin, pour réitérer une fois de plus, le codage valeur-clé ne fonctionne pas avec les options. Ci-dessous, j'ai fini par trouver quelque part mais j'oublie où donc à quiconque a posté cela, je m'excuse et je donnerais le crédit si je me souvenais où j'ai trouvé cela, mais cela m'a sauvé la vie:
Vous ne pouvez pas utiliser KVC sur une propriété Int facultative, car KVC est Cocoa / Objective-C et Objective-C ne peut pas voir un Int facultatif - il n'est pas ponté vers Objective-C. Objective-C ne peut voir que les types reliés à Objective-C:
types de classe dérivés de NSObject
types de classe exposés avec @objc
Structures rapides pontées