7
votes

#typedef et kvc à Objc

J'ai une classe qui ressemble à ceci:

myProperties.prop2; //works
[myProperties prop2]; //works
[myProperties valueForKey:@"prop1"]; //works
[myProperties valueForKey:@"prop2"] // throws NSUnknownKeyException ??


1 commentaires

Vraiment bizarre, courir dans le même problème moi-même. Aussi si vous faites [myProperties répondselector: @selector (ProP2)] Il renvoie oui aussi bien


4 Réponses :


5
votes

de compiler votre exemple et d'émettre Dump dessus, il apparaît le TLEDEF est devenu transformé en

#define NSNumberBool NSNumber


0 commentaires

5
votes

Je suppose que c'est un problème avec la façon dont Typedef interagit avec la méthode de code.

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.

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.


0 commentaires

1
votes

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: xxx

vidages de classe à: xxx

à 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).


0 commentaires

2
votes

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 @Compatibility_alias directive. Cela vous permet d'écrire: xxx

et avoir un alias créé pour nsnumber . KVO fonctionne parfaitement avec elle.

Sur la réponse actuellement acceptée, cela bénéficie d'un grand avantage d'être sécurisé.


0 commentaires