J'ai une classe qui ressemble à ceci:
myProperties.prop2; //works [myProperties prop2]; //works [myProperties valueForKey:@"prop1"]; //works [myProperties valueForKey:@"prop2"] // throws NSUnknownKeyException ??
4 Réponses :
de compiler votre exemple et d'émettre Dump dessus, il apparaît le TLEDEF est devenu transformé en
#define NSNumberBool NSNumber
Je suppose que c'est un problème avec la façon dont Typedef interagit avec la méthode de code. p>
Je crois que TactyFF reste un mot clé P pur c et ne se produit vraiment qu'avec des types objectifs-C "généralement parce qu'ils devaient être mis en œuvre comme des structures. P>
En conséquence, lorsque vous TYPEDF NSNumber à NSNumberbool, cela fonctionne bien pour les appels de méthode (et les propriétés de la syntaxe Dot), mais (en supposant que ma théorie est correcte), ce qui ne peut pas indiquer que Nsnumberbool et Nsnumber sont le même type. < / p>
Je serai intéressé de voir ce que quelqu'un qui sait mieux dit. P>
Semblable à la réponse de Nall, j'ai également essayé la vidage de la classe. J'ai trouvé une solution de contournement intéressante si laide si laid. Le code suivant: vidages de classe à: p> à nouveau, pas exactement ce que vous voulez, mais vous obtiendrez la vérification du temps du compilateur de ne pas avoir de nsnumbers et de Nsnumberbools mêlant (qui est que je suppose la raison de la typedef en premier lieu). P> p>
C'est plutôt un ancien poteau, mais je suis venu à elle tout en recherchant une solution à ce problème, qui est bien résolu par Objective-C 2.0 et avoir un alias créé pour Sur la réponse actuellement acceptée, cela bénéficie d'un grand avantage d'être sécurisé. P> p> @Compatibility_alias code> directive. Cela vous permet d'écrire: nsnumber code>. KVO fonctionne parfaitement avec elle. P>
Vraiment bizarre, courir dans le même problème moi-même. Aussi si vous faites
[myProperties répondselector: @selector (ProP2)] code> Il renvoie oui aussi bien