Estás en: Union de 2 strings
Para dar las gracias debes entrar o registrarte en el foro
Hola a todos, estoy teniendo un problema a la hora de unir dos objetos de tipo NSString y espero que me podais echar una mano. Os explico un poco la situación:
Tengo 2 NSStrings extraidas de un JSON, sus esquemas son los siguientes:
listaImagenes: ( "imagen1.jpg", "imagen2.jpg", "imagen3.jpg" ... )
listaNombres: ( "nombre1", "nombre2", "nombre3", ...)
Mi intención es unirlas en uno solo siguiendo el siguiente esquema. ("nombre1", "imagen1.jpg", "nombre2", "imagen2.jpg", "nombre3", "imagen3.jpg"...), Es decir, que vaya intercalando uno a uno los campos de cada string y no dejarlos ("nombre1", "nombre2", "imagen1", "imagen2"...).
He puesto los colores para que se vea más claro lo que intento hacer, espero que podais ayudarme.
Gracias!!
Hola.
Creo que con un NSDictionary lo tendrías hecho.
El listado de nombres serían las keys y el listado de imágenes los values.
Suerte!
Ha habido algunos cambios en lo que estoy haciendo, ahora lo que tengo es un NSString llamado usersList con la siguiente estructura:
{
createTime = "fecha hora";
fullname = "Nombre de Usuario";
"prof_id" = 5;
thumb = "imagen.jpg";
},
{
//Datos de otro usuario
}...
Tengo que mostrar por pantalla (no en debug area), un listado a dos o tres columnas en el que se muestre la imagen del usuario y su nombre debajo (el del usuario, no el de la imagen).
Para esto necesito crear una estructura o algún tipo de datos en el que se guarden los datos de todos los usuarios pero he visto que con NSDictionary solo guarda pares clave/valor y yo tengo que guardar 4 datos de cada usuario, por lo que creo que esto no me vale.
¿Podeis echarme una mano? Gracias!!
¿Y no puedes hacerlo mediante un NSMutableArray de una objeto propio?. Algo así (escribo de memoria):
Creas tu objeto. En el MiEstructura.h (faltaria el MiEstructura.m)
@interface MiEstructura: NSObject {
NSString* createTime;
NSString *fullName;
..
}
@property (retain) NSString* createTime;
@property (retain) NSString* fullName;
...
@end
Y luego en el viewController creas el array de tus objetos:
MiEstructura *miEstructura = [[MiEstructura alloc] init];
miEstrucutra.fullName = @"Nombre de Usuario";
...
NSMutableArray *miArray = [[NSMutableArray alloc] initWithCapacity: _numObjectos ];
[miArray addObject: miEstructura];
[miEstructura release];
...
Para recuperar los datos simplemente:
MiEstructura *miEstructura = (MiEstructura*)[miArray objectAtIndex: _indexDelObjeto];
miLabel.text = miEstructura.fullname;
...
De esta forma tienes todo el control sobre tu estructura de datos y ademas, al ser un objeto puedes añadirle funcionalidad extra, como comprobaciones en los setters o conversiones automáticas de formato, escribiendo el código solo en un sitio.
Si no necesitas un objeto, puedes crear una estructura de datos (igual que en C) pero se complica si quieres manejarlo desde arrays:
http://stackoverflow.com/questions/3931 ... of-structs
Me gusta la idea de crear un objeto propio, había leido algo sobre ello pero no he encontrado ninguna explicación clara hasta ahora. Te explico un poco el código que tengo y las dudas que tengo por si pudieras ayudarme:
He creado la clase usersController:
//UsersController.h
#import
@interface UsersController : NSObject{
NSInteger *prof_id;
NSString *createTime;
NSString *fullName;
NSString *thumb;
}
@property (nonatomic) NSInteger *prof_id;
@property (nonatomic, retain) IBOutlet NSString *createTime;
@property (nonatomic, retain) IBOutlet NSString *fullName;
@property (nonatomic, retain) IBOutlet NSString *thumb;
@end
//UsersController.m
#import "UsersController.h"
@implementation UsersController
@synthesize prof_id;
@synthesize fullName;
@synthesize createTime;
@synthesize thumb;
@end
//Fragmento del ViewController
//En estos 4 arrays guardo los correspondientes datos extraidos de usersList, que está en formato JSON
NSArray *userName = [usersList valueForKey:@"fullname"];
NSArray *userID = [usersList valueForKey:@"prof_id"];
NSArray *userThumb = [usersList valueForKey:@"thumb"];
NSArray *userCreateTime = [usersList valueForKey:@"createTime"];
//Declaro Objeto Usuarios
UsersController *usuarioSimple = [[UsersController alloc] init];
//Array Usuarios al que le iré añadiendo todos los objetos de tipo Usuario
NSMutableArray *arrayUsuarios = [[NSMutableArray alloc] initWithCapacity: [userID count]];
NSInteger i;
for (i=0; i<[userName count]; i++) {
//Guardo en el objeto usuario los datos extraidos de los JSON userName, userID, userThumb y userCreateTime
usuarioSimple.prof_id = [userID objectAtIndex:i];
usuarioSimple.fullName = [userName objectAtIndex:i];
usuarioSimple.thumb = [userThumb objectAtIndex:i];
usuarioSimple.createTime = [userCreateTime objectAtIndex:i];
//Guardo en el array de objetos el objeto que acabo de obtener
[arrayUsuarios addObject:usuarioSimple];
}
developer escribió:
El problema que tengo viene a la hora de acceder a algún campo en concreto del array de objetos. Por ejemplo, si quiero guardar en una variable llamada prueba el valor prof_id del 2º objeto del array, ¿cómo tendría que hacerlo? Estoy probando pero no lo consigo.
Gracias!
Lo he dejado así:
NSMutableArray *arrayUsuarios = [[NSMutableArray alloc] initWithCapacity: [userID count]];
//[arrayUsuarios addObject:listaUsuarios];
NSInteger i;
UsersController *pruebaConsulta = [[UsersController alloc] init];
UsersController *usuarioSimple;
for (i=0; i<[userName count]; i++) {
//Declaro Objeto Usuarios
usuarioSimple = [[UsersController alloc] init];
//Guardo en el objeto usuario los datos extraidos de los JSON userName, userID, userThumb y userCreateTime
usuarioSimple.prof_id = [userID objectAtIndex:i];
// NSLog(@"prof_id: %@\n", usuarioSimple.prof_id);
usuarioSimple.fullName = [userName objectAtIndex:i];
// NSLog(@"fullName: %@\n", usuarioSimple.fullName);
usuarioSimple.thumb = [userThumb objectAtIndex:i];
// NSLog(@"thumb: %@\n", usuarioSimple.thumb);
usuarioSimple.createTime = [userCreateTime objectAtIndex:i];
// NSLog(@"createTime: %@\n\n", usuarioSimple.createTime);
[arrayUsuarios addObject:usuarioSimple];
usuarioSimple = [arrayUsuarios objectAtIndex:i];
NSLog(@"usuarioSimple.prof_id[%@]: %@",i, usuarioSimple.prof_id);
NSLog(@"usuarioSimple.fullName[%@]: %@",i, usuarioSimple.fullName);
NSLog(@"usuarioSimple.thumb[%@]: %@",i, usuarioSimple.thumb);
NSLog(@"usuarioSimple.createTime[%@]: %@\n",i, usuarioSimple.createTime);
[usuarioSimple release];
}
[1505:f803] usuarioSimple.prof_id[(null)]: 504
[1505:f803] usuarioSimple.fullName[(null)]: Hugo Huff
[1505:f803] usuarioSimple.thumb[(null)]: 4f664efc1b6011cea74acc77eb32367f1d6e73cec671c76a63e95399.jpg
[1505:f803] usuarioSimple.createTime[(null)]: 2012-04-26 11:54:59
Creo que he detectado otro problema, pero no se cómo solucionarlo. Cuando inicializo una variable con el valor [userName count], [userID count], [userThumb count] o [userCreateTime count] e intento imprimirlo por pantalla, salta el error, ¿cómo debería de inicialzarlo para corregirlo?
Con este poblema y el de la declaración de la variable i que uso en el for me estoy volviendo loco.
Espero que me podais ayudar.
Gracias!!
Ya lo he solucionado, por si a alguien le sirve es que para mostrar números enteros con NSLog no hay que usar %@ sino %i ó %d.
Yo no lo sabía y me ha desesperado por momentos.
Leyendoos,creo que seriais capaces de descifrar jeroglíficos sin problemas,que envidia no saber programar.....