Ios développement des nuages ​​pour les nuls

Lorsque vous utilisez un service Web qui est basé dans le nuage, votre réponse est susceptible d'être en JSON ou XML, deux formats standard pour la transmission de données entre un serveur et application Web. Il y aura des moments où vous avez le choix entre les deux formats, mais d'autres fois vous avez à aller avec ce que vous obtenez.

Sommaire

Le géocodage service Web Google, par exemple, ne vous donner un choix.

Si vous voulez la réponse au format XML, vous pouvez utiliser

http://maps.googleapis.com/maps/api/geocode/xml

Si vous voulez la réponse en JSON, vous pouvez utiliser

http://maps.googleapis.com/maps/api/geocode/json?paremters

Bien que similaire dans l'intention, comment vous obtenez des informations sur XML et des structures de données JSON est tout à fait différente dans l'exécution.

L'analyse d'une réponse XML du Cloud

Lorsque vous utilisez un service Web qui est basé dans le nuage, votre réponse pourrait être en XML. Si, lorsque vous travaillez avec votre service Web basé sur le cloud, vous deviez entrer la commande suivante dans votre navigateur Web

http://maps.googleapis.com/maps/api/geocode/xml?sensor=trueaddress=Empire
State Building

vous souhaitez récupérer une partie XML - ceci, par exemple:




# 133-40.7484395-73.9856709# 133-

Depuis XML ne se manifeste pas exactement de façons qui sont faciles à comprendre, vous auriez alors à analyser quoi que ce soit qui vous donne XML.

Rappelez-XML est constitué d'éléments qui ont des balises de début et de fin. Pour obtenir l'information grâce à iCloud, vous utilisez le NSXMLParser classe qui utilise le modèle de délégation. Voilà comment cela pourrait fonctionner:

NSXMLParser * XmlParser = [[alloc NSXMLParser] initWithdata: données] - [XmlParser setDelegate: auto] - [XmlParser parse] -

Il se trouve qu'il ya quatre méthodes de délégué NSXMLParser vous comptez mettre en œuvre pour analyser une structure de données XML:

parser:didStartElement:namespaceURI:qualifiedName:attributes:parser:foundCharacters:parser:didEndElement:namespaceURI:qualifiedName:parser:parseErrorOccurred:

analyseur: didStartElement: namespaceURI: qualifiedName: attributs: vous permet de savoir que l'analyseur a trouvé un élément avec une étiquette, par exemple, et il est à vous pour extraire les données dans le analyseur: foundCharacters: Procédé.

L'analyse d'une réponse JSON du Cloud

Lorsque vous utilisez un service Web qui est basé dans le nuage, votre réponse pourrait être en JSON. Si, lorsque vous travaillez avec votre service Web basé sur le cloud, vous deviez entrer la commande suivante dans votre navigateur Web

http://maps.googleapis.com/maps/api/geocode/json?sensor=trueaddress=Empire 
State Building

vous souhaitez récupérer une partie JSON - ce qui suit, par exemple,

{résultat résultats: [{{{... géométrielimites: {Nord est: {Lat: 40.7489545,GNL: -73,98483449999999},Sud Ouest: {Lat: 40.7479245,GNL: -73.9865073}},emplacement: {Lat: 40.7484395,GNL: -73.9856709}, ...}

Depuis JSON est tout aussi énigmatique que XML, vous auriez alors à analyser quoi que ce soit qui vous donne JSON.

L'analyse JSON, cependant, est très différente de l'analyse XML. JSON est construit sur deux structures que vous êtes familier avec calme - les tableaux et les dictionnaires. L'exemple suivant utilise JSON la fois:

NSError * error = nil-NSDictionary * responseDict = [NSJSONSerialization JSONObjectWithdata: données 
Erreur de NSJSONReadingMutableContainers:: options erreur] -

Quand vous faites l'analyse JSON, vous avez quelques options que vous pouvez définir ainsi:

  • NSJSONReadingMutableContainers: Les tableaux et les dictionnaires vous obtenez en retour sont modifiables de sorte que vous pouvez les modifier. La valeur par défaut est immuable.

  • NSJSONReadingMutableLeaves: Les chaînes que vous récupérez sont modifiables de sorte que vous pouvez les modifier. La valeur par défaut est immuable.

  • NSJSONReadingAllowFragments: Indique que l'analyseur devrait permettre objets de haut niveau qui ne sont pas des tableaux ou des dictionnaires. La valeur par défaut nécessite les objets de haut niveau JSON à être soit un des tableaux ou des dictionnaires.

Lorsque vous utilisez le NSJSONSerialization classe, vous (habituellement, mais pas nécessairement) de revenir soit un tableau ou un dictionnaire qui peut inclure des chaînes et des numéros et même d'autres tableaux et dictionnaires (pensez à la liste des biens objets ici).

Dans ce cas, vous pourriez obtenir à l'emplacement lat et GNL en faisant

NSDictionary * Résultat = [résultats objectAtIndex: 0] * -NSDictionary géométrie = [résultat objectForKey: @ "géométrie"] - NSDictionary * location = [géométrie objectForKey: @ "localisation"] - latitude = [emplacement valueForKey: @ "lat"] -Longitude = [emplacement valueForKey: @ "GNL"] -