¿Cuál es la forma más fácil de crear una matriz de estructuras en Cocoa?¿Cuál es la forma más fácil de crear una matriz de estructuras?
Respuesta
Si desea utilizar una NSArray que necesita a la caja de seguridad de sus estructuras. Puede usar la clase NSValue para codificarlos.
Algo como esto para codificar:
struct foo {
int bar;
};
struct foo foobar;
foobar.bar = 3;
NSValue *boxedFoobar = [NSValue valueWithBytes:&foobar objCType:@encode(struct foo)];
Y después de recuperarlo a cabo:
struct foo newFoobar;
if (strcmp([boxedFoobar objCType], @encode(struct foo)) == 0)
[boxedFoobar getValue:&newFoobar];
Si estás de acuerdo con una disposición regular de edad C:
struct foo{
int bar;
};
int main (int argc, const char * argv[]) {
struct foo foobar[3];
foobar[0].bar = 7;
}
Si desea una NSArray, se necesita un objeto envoltorio. La mayoría de las primitivas usan NSNumber, pero eso podría no ser aplicable a su estructura. Una envoltura no sería muy difícil de escribir, ¡aunque ese tipo de derrotas tiene el propósito de usar una estructura!
Editar: Esto es algo que no he hecho, pero solo he pensado. Si lo piensas, un NSDictionary es básicamente una estructura para objetos. Sus claves pueden ser los nombres de los componentes struct como NSStrings y sus valores pueden ser del tipo de datos correspondiente incluido en el contenedor Cocoa aplicable. Luego solo coloque estos diccionarios en un NSArray.
Creo que la esencia es que tienes muchas opciones. Si fuera usted, haría algo de experimentación y vería qué funciona mejor.
O asignar dinámicamente:
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);
}
¿Tiene que ser una estructura? En general, es mejor convertirlo en un objeto si puedes. Luego puede usar cosas como KVC y enlaces con ella.
Hola Peter, ahora mismo no creo que los necesite, pero aún así es un tema que me interesa. Acabo de abrir una pregunta específica: http://stackoverflow.com/questions/393662 –
Es más fácil usar la clase, pero ¿qué sucede si necesita trabajar con C y estructuras objetivas como CGRect u otras? He tratado de utilizar NSValue, pero extraña obra ...:
CGRect rect =CGRectMake(20,220,280,30);
NSValue* rectValue = [NSValue valueWithCGRect:rect];
NSArray *params1;
params1= [NSArray arrayWithObjects:rectValue,nil];
Pero, puedo obtener el valor CGRect sólo como:
CGRect cgr = [[params1 objectAtIndex:0] CGRectValue];
Cuando utilizo este:
id currentVal = [params1 objectAtIndex:0];
void* buffer;
buffer=[currentVal pointerValue];
que causa el error ...
problema resuelto here
- 1. ¿Cuál es la forma más fácil de animar una línea?
- 2. ¿Cuál es la forma más fácil de conservar mapas/estructuras en Clojure?
- 3. Ruby: ¿Cuál es la forma más fácil de eliminar el primer elemento de una matriz?
- 4. ¿Cuál es la forma más fácil de crear una tabla de Excel con C#?
- 5. ¿La forma más fácil de implosionar() una matriz bidimensional?
- 6. ¿Cuál es la forma más fácil de manejar una matriz asociativa en C#?
- 7. ¿La forma más fácil de transformar la colección en matriz?
- 8. ¿Cuál es la forma más fácil de crear una extensión C opcional para un paquete python?
- 9. C#: ¿cuál es la forma más fácil de restar tiempo?
- 10. ¿La forma más fácil de crear una GUI en Java?
- 11. ¿Cuál es la forma más fácil de crear un sitio web de reserva de citas?
- 12. ¿Cuál es la forma más fácil/más barata de crear una base de datos SQL basada en la nube?
- 13. ¿Cuál es la mejor y más fácil forma de crear un formulario UITableView?
- 14. matriz de enteros o matriz de estructuras: ¿cuál es mejor?
- 15. C: ¿Cuál es mejor? Malloc matriz de punteros a las estructuras, o una matriz de estructuras?
- 16. ¿Cuál es la forma más fácil de hacer una combinación de teclas para Windows?
- 17. ¿Cuál es la forma más fácil de saber si una gramática BNF es ambigua o no?
- 18. ¿Cuál es la forma más fácil de obtener una OutOfMemoryException en C#?
- 19. ¿Cuál es la forma más fácil de especificar una lista con valores en Spring?
- 20. ¿Cuál es la forma más eficiente de crear ListBuffer vacío?
- 21. ¿Cuál es la manera más fácil de empujar un elemento al comienzo de la matriz?
- 22. La forma más fácil de convertir una Blob en una matriz de bytes
- 23. ¿Cuál es la forma más fácil de convertir una cadena xhtml a PDF utilizando Flying Saucer?
- 24. ¿Cuál es la forma más fácil de eliminar el primer carácter de una cadena?
- 25. ¿Cuál es la forma más fácil de probar una API REST de catalizador?
- 26. ¿Cuál es la forma más fácil de actualizar una aplicación grande de C# winforms a WPF
- 27. ¿Cuál es la forma más fácil de acceder a un micrófono de una computadora en Python?
- 28. ¿Cuál es la forma más fácil de llenar los vacíos en una lista de números?
- 29. ¿Cuál es la forma más fácil de conservar datos en una aplicación de iPhone?
- 30. ¿Cuál es la forma más fácil de exportar una base de datos SQLServer 2000 a XML?
Una buena sugerencia, aunque hay un rendimiento de boxeo y desempaquetado. No es terrible, pero notable si necesitas la velocidad. –