Quelle est la manière la plus simple de créer un tableau de structures dans Cocoa?Quelle est la manière la plus simple de créer un tableau de structures?
Répondre
Si vous souhaitez utiliser un NSArray dont vous aurez besoin à la boîte vos struct. Vous pouvez utiliser la classe NSValue pour les coder.
Quelque chose comme cela encode:
struct foo {
int bar;
};
struct foo foobar;
foobar.bar = 3;
NSValue *boxedFoobar = [NSValue valueWithBytes:&foobar objCType:@encode(struct foo)];
Et puis pour le récupérer sur:
struct foo newFoobar;
if (strcmp([boxedFoobar objCType], @encode(struct foo)) == 0)
[boxedFoobar getValue:&newFoobar];
Si vous êtes d'accord avec un réseau régulier vieux C:
struct foo{
int bar;
};
int main (int argc, const char * argv[]) {
struct foo foobar[3];
foobar[0].bar = 7;
}
Si vous voulez un NSArray, vous aurez besoin d'un objet wrapper. La plupart des primitives utilisent NSNumber, mais cela peut ne pas s'appliquer à votre structure. Un wrapper ne serait pas très difficile à écrire, bien que ce genre de vaincre l'objectif d'utiliser une structure!
Edit: C'est quelque chose que je n'ai pas fait mais juste pensé. Si vous y pensez, un NSDictionary est essentiellement une structure pour les objets. Vos clés peuvent être les noms des composants de la structure en tant que NSStrings et vos valeurs peuvent être du type de données correspondant encapsulé dans l'encapsuleur Cocoa applicable. Ensuite, il suffit de mettre ces dictionnaires dans un NSArray. Je suppose que l'essentiel est que vous avez beaucoup d'options. Si j'étais vous, j'expérimenterais et verrais ce qui fonctionne le mieux.
ou allocation dynamique:
struct foo {
int bar;
};
int main (int argc, const char * argv[]) {
struct foo *foobar = malloc(sizeof(struct foo) * 3);
foobar[0].bar = 7; // or foobar->bar = 7;
free(foobar);
}
-t-il besoin d'être un struct? Il est généralement préférable d'en faire un objet si vous le pouvez. Ensuite, vous pouvez utiliser des choses comme KVC et Bindings avec.
Hey Peter, en ce moment je ne pense pas que j'ai besoin de ceux-ci, mais c'est un sujet qui m'intéresse. Je viens d'ouvrir une question spécifique: http://stackoverflow.com/questions/393662 –
Il est plus facile d'utiliser la classe, mais que se passe-t-il si vous avez besoin de travailler avec C et les structures de l'objectif c comme CGRect ou autres. J'ai essayé d'utiliser NSValue, mais il travaille étrange ...:
CGRect rect =CGRectMake(20,220,280,30);
NSValue* rectValue = [NSValue valueWithCGRect:rect];
NSArray *params1;
params1= [NSArray arrayWithObjects:rectValue,nil];
Mais, je peux obtenir la valeur CGRect seulement comme:
CGRect cgr = [[params1 objectAtIndex:0] CGRectValue];
Quand j'utilise ceci:
id currentVal = [params1 objectAtIndex:0];
void* buffer;
buffer=[currentVal pointerValue];
provoque l'erreur ...
problème résolu
- 1. Quelle est la manière la plus simple de créer une carte d'identité STL?
- 2. Quelle est la manière la plus simple et la plus légère de créer un client-serveur en Perl?
- 3. Quelle est la manière la plus simple de créer des archives multi-parties sous Unix?
- 4. Quelle est la manière la plus simple de créer et de comparer un mot de passe salé dans .NET?
- 5. Quelle est la manière la plus simple de se connecter à un objet serveur distant .NET
- 6. Quelle est la manière la plus simple de formater un .NET DateTime selon YYYYMMDD ou similaire?
- 7. Quelle est la manière la plus simple de faire 'est' en Java?
- 8. Quelle est la manière la plus simple de remplacer la valeur par défaut d'une propriété Delphi?
- 9. Quelle est la manière la plus simple de demander à wxWidgets de toujours utiliser wxFileConfig?
- 10. Quelle est la manière la plus simple de changer l'image de l'onglet sélectionné dans ASP.NET MVC?
- 11. Quelle est la manière la plus simple d'ajouter un à une chaîne binaire en Perl?
- 12. Quelle est la manière la plus simple d'interagir entre un SAP OMS et Websphere Commerce?
- 13. Quelle est la manière la plus simple de faire des tâches d'arrière-plan dans Windows.Forms?
- 14. Quelle est la manière la plus simple de simuler une référence par passe dans Actionscript 3.0?
- 15. Quelle est la manière la plus simple de réécrire les URL dans ASP.NET MVC/IIS7?
- 16. Quelle est la manière la plus simple et la plus compacte de créer un IEnumerable <T> ou ICollection <T>?
- 17. Quelle est la manière la plus simple d'obtenir la charge CPU totale actuelle dans .NET?
- 18. Quelle est la manière la plus rapide/la plus simple de dénormaliser cette table hiérarchique en une table plate?
- 19. Quelle est la manière la plus simple d'appeler l'URL HTTP POST en utilisant Delphi?
- 20. Quelle est la manière la plus simple d'effectuer des calculs totaux sur des objets enfants?
- 21. Quelle est la manière la plus simple de configurer un visualiseur de rapports BIRT pour une application xulrunner?
- 22. Quelle est la manière la plus simple d'étendre les codes d'échappement HTML sous UNIX?
- 23. Quelle est la manière la plus courante de créer une boîte de dialogue de sélection de dossier en utilisant Delphi?
- 24. Quelle est la manière la plus simple d'analyser l'ancre à partir de l'emplacement de la page en cours?
- 25. Quelle est l'alternative la plus simple à un tableau générique en Java?
- 26. Quelle est la manière la plus simple/élégante de calculer la longueur d'un nombre écrit en tant que texte?
- 27. La manière la plus simple de synchroniser un formulaire de dialogue avec une ligne datagridview?
- 28. Java Right Click ne fait pas de sélection. Quelle est la manière la plus simple de résoudre ceci globalement?
- 29. Quelle est la manière la plus simple de convertir une chaîne xhtml en PDF en utilisant Flying Saucer?
- 30. Quelle est la manière la plus élégante de faire "foreach x sauf y" en PHP?
Une bonne suggestion, bien qu'il y ait une boxe de succès et unboxing. Ce n'est pas terrible, mais notable si vous avez besoin de la vitesse. –