J'ai un NSArray qui contient deux types d'objets. Appelons-les Apple et Orange. Quand je construis ma cellule, je ne sais pas quel type est dans mon tableau, pommes ou oranges. Comment puis-je utiliser le type d'ID générique pour stocker l'objet, puis lancer correctement?Comment utiliser la variable id dans objective-c?
Répondre
Vous pouvez utiliser isKindOfClass:(Class)aClass
pour tester le type de classe:
if ([myObject isKindOfClass:[Apple class]])
// do stuff
Je ne sais pas pourquoi vous pensez que vous devez jeter cependant. NSArray ne se soucie pas du type d'objet que vous y stockez, donc quand vous le sortirez, ce sera toujours le même objet. Mais si vous voulez vous pouvez toujours jeter en faisant quelque chose comme
Apple *myApple = (Apple *)myObject;
Quoi qu'il en soit, connaissant le type de classe, il est devrait être suffisant pour vous de prendre des mesures appropriées, car je crois savoir que vous montrant les deux types de la même table, tout ce que vous avez vraiment besoin de faire est d'afficher de manière appropriée leurs différentes propriétés. Ne pas mélanger les types de classes dans un NSArray.
Vous pouvez le faire, vous pouvez lancer des vérifications pour le type - mais c'est une très mauvaise idée, SAUF si elles font partie de la même arborescence de sous-classes (disons, les deux dérivées de Fruit). Alors au moins quelque chose regarde là-dedans peut supposer quel genre de Fruit il pourrait être, et vérifie pour des détails. Fondamentalement vous vous épargnerez beaucoup de maux de tête si vous ne mélangez pas les types dans les classes de conteneurs, quand quelque part sur la route des chiffres de code pour une raison quelconque, il n'y a que des pommes mais quelqu'un jette dans une poire. Ensuite, BOOM!
Je pense qu'une meilleure façon d'énoncer ceci est: Ne mélangez pas les types dans un conteneur à moins que vous ayez l'intention de les utiliser de façon polymorphique. Je peux penser à plusieurs façons d'utiliser des objets de types différents polymorphiquement quand ils ne partagent ni une classe de base ni un protocole. Dans l'ensemble, cependant, je partage votre opinion. (Au fait, je ne parle pas nécessairement de polymorphisme formel.) –
C'est une bien meilleure façon de mettre ce que j'essayais de dire, même si j'essayais de garder les choses simples ... ce que vous avez dit est beaucoup plus précis et la façon dont j'essaie de garder les choses. –
- 1. Analyseur AMF0 dans ObjectiveC
- 2. Comment utiliser une variable à la place de ID dans jquery
- 3. Comment utiliser la variable setEnv dans apache?
- 4. MVC utilisé dans la programmation ObjectiveC
- 5. comment utiliser la variable dans un nom de variable
- 6. Comment puis-je simplement changer une variable de classe d'une autre classe dans ObjectiveC?
- 7. Personnalisation de writeToFile dans ObjectiveC
- 8. Combine chaîne en ObjectiveC
- 9. alloca et ObjectiveC Garbage Collector
- 10. Comment utiliser la variable Session dans un HttpHandler
- 11. NSString question ObjectiveC
- 12. Comment utiliser une variable dans la fonction animate() dans jQuery?
- 13. Comment utiliser # {field 'variable'}
- 14. Chargement d'une séquence d'images dans InterfaceBuilder -ObjectiveC
- 15. xml xslt comment utiliser la variable incrément
- 16. Comment utiliser la variable template de Django?
- 17. Comment utiliser une variable JS dans JSON?
- 18. Utiliser la variable dans l'instruction SQL LIKE
- 19. Comment utiliser une variable comme nom de variable dans Ruby?
- 20. markaby: utilisation de la variable comme ID de classe
- 21. Comment faire AWK utiliser la variable créée dans Bash Script
- 22. Comment utiliser la même variable dans deux classes
- 23. Reliure ObjectiveC classe C# problème
- 24. Comment résoudre les fuites dans le code suivant? ObjectiveC
- 25. PHP: utiliser id dans une autre colonne
- 26. Utiliser la variable Javascript dans le nom de l'objet?
- 27. Utiliser les ID Android?
- 28. Utiliser la variable JQuery à l'intérieur $ (php)
- 29. Comment utiliser id et facettes avec Solr
- 30. Comment utiliser une variable XSL dans xsl: apply-templates?
Vous n'avez pas besoin de convertir, mais si vous utilisez object.property pour utiliser les propriétés d'un objet, vous devez le convertir au type approprié. Sinon, vous pouvez simplement utiliser [object property] et [object setProperty: x] pour accéder à une propriété. – lucius
@lucius: c'est pourquoi vous devriez le faire de toute façon! : P –