¿Hay una manera fácil de trabajar con servicios web para iPhone dev?
Pregunta
Queremos tomar datos XML y convertirlos en un objeto NSDictionary, pero no queremos iterar manualmente sobre el XML. ¿Hay una forma fácil de hacer esto? ¿Cómo estás haciendo los servicios web para tu aplicación de iPhone?
Solución
Si tiene control sobre la salida XML, puede intentar crear una lista de propiedades que luego puede leer en un diccionario usando -dictionaryWithContentsOfURL: (aunque la mejor manera asincrónica sería obtener los datos usando una NSURLConnection y luego convertir los datos) utilizando el método -propertyList en NSString). Puede encontrar más información sobre las listas de propiedades aquí: http: // developer .apple.com / documentation / Cocoa / Conceptual / PropertyLists / Introduction / chapter_1_section_1.html
Por supuesto, la mejor solución es usar un cliente RESTful y una combinación de NSURLConnection para obtener / enviar los datos y las clases TouchXML ( http://code.google.com/p/touchcode/wiki/TouchXML ) para analizar los datos, aunque esto requeriría más trabajo para poner los datos en una diccionario. Por supuesto, si estos van a ser los principales objetos de datos en su sistema, realmente desea utilizar una clase personalizada o SQLite para almacenar los datos, ya que le ofrece mucha más confiabilidad al probar su aplicación que un diccionario.
Otros consejos
Si puede controlar la salida del servidor, intente usar errores. De lo contrario, se queda atascado con el análisis de XML (o JSON si el servidor puede hacer eso), pero hay marcos que puede usar. Consulte la respuesta a esta pregunta .
También, aquí hay una buena descripción general de cómo hacer clientes RESTful en el iPhone:
https: / /developer.apple.com/webapps/articles/creatingrestfulclients.html
Puede devolver los datos en formato JSON. Hay muchos analizadores JSON de código abierto disponibles para el iPhone (siendo TouchJSON uno).
Hay otra clase disponible llamada NSPropertyListSerialization que te brinda un diccionario a partir de datos.
Puedes hacer algo como esto con los datos que recibes
NSDictionary * propertyList;
Formato NSPropertyListFormat;
NSString * errorStr;
propertyList = [NSPropertyListSerialization
propertyListFromData: receiveData
mutabilityOption: NSPropertyListImmutable
formato: & amp; formato
errorDescription: & amp; errorStr];
Lo sentimos, ¡no sé qué etiquetas se utilizan aquí para formatear el código!