|
Quiero rellenar una tabla con datos obtenidos de una BD, pero estoy teniendo un pequeño problema. El servidor me devuelve un objeto:
Cuando me llega a la aplicación, primero lo metí en un NSArray, pero me di cuenta de que así no puedo acceder a los datos a través de su key, así que lo metí en un NSDictionary. Lo muestro en el NSLog y efectivamente me devuelve los datos. Ahora llego al método para llenar las celdas y es cuando no me rellena nada, pongo:
Pero no me muestra nada, poniendo:
Me devuelve (null), sé que rellenar tablas es algo básico, no es la primera vez que relleno una tabla, pero si que es la primera que lo hago desde un NSDictionary creado a través de JSON. ¿Cómo lo puedo hacer? He leído una pregunta similar en este mismo foro pero no me ha servido. Muchas gracias. EDITO: Por cierto, para el JSON uso el Framework del SDK de iOS5, no uso ninguno no oficial como el SBJSon o el JSonKit |
|
El objeto raiz que se genera es un NSDictionary con los índicas "0", "1", cada uno de estos índices corresponde a otro objeto NSDictionary donde tienes los datos. Por ello para acceder a cada elemento debes hacer lo siguiente:
Muy bien, ha funcionado, aunque con una pequeña modificación para que me coja todos los objetos: NSDictionary* partido = [partidos2 objectForKey:[NSString stringWithFormat:@"%d",indexPath.row]]; Muchas gracias.
(02 Ago '12, 12:30)
Sexto
|
|
Buenas, Yo te recomendaría que te crearas una clase que sea del mismo tipo que cada objeto padre de la respuesta de JSON, en tu caso creo que por ejemplo sería "Partido". Con el NSDictionary me voy recorriendo el JSON y voy dando valor a mis propiedades de cada partido, tantos como objetos complejos te devuelva el JSON. Al finalizar esto, créate un NSMutableARRay o NSArray que contenga tantos objetos partidos como tengas, y así en la tabla ya rellenas los datos a partir de este NSMutableArray. Saludos! Soy novatillo, hago mis cosas pero aprendo de mis errores. La clase Partido, subclase de NSObject?
(02 Ago '12, 12:04)
Sexto
Si, eso es!
(02 Ago '12, 12:17)
KoldoMac
Me he dado cuenta de una cosa viendo esto: http://stackoverflow.com/questions/6219156/asynchronous-data-in-nstableview He probado, en vez de meter los datos en un NSDictionary los he metido en un NSArray, después creo un NSDictionary con cada uno de los partidos: NSDictionary *partido = [partidos objectAtIndex:indexPath.row]; (Realmente no dejan de ser "pseudobjetos" parecido a lo que me has dicho tu). Y luego hago esto: cell.Fecha.text = [partido objectForKey:@"fecha"]; Pero me sale error en tiempo de ejecución (SIGABRT) Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x6db08c0'
(02 Ago '12, 12:20)
Sexto
|
|
¿Estás seguro de que [partidos objectAtIndex:indexPath.row] te está devolviendo un diccionario? Te recomiendo que hagas lo que te ha dicho KoldoMac. Creo que es lo más elegante y personalmente la opción que siempre utilizo para hacer estas cosas. Los pasos a seguir podrían ser estos:
Ya solamente quedaría llamar al método anterior cuando quieras parsear los partidos que recibes en un JSON y ahí tendrías un NSArray listo para utilizar en un tableView. ¡Saludos! |