iOS Desenvolvimento Nuvem For Dummies

Quando você usa um serviço web que é baseado na nuvem, sua resposta é provável que seja em JSON ou XML, dois formatos padrão para a transmissão de dados entre um servidor e aplicações web. Haverá momentos em que você tem uma escolha entre os dois formatos, mas outras vezes você tem que ir com o que você recebe.

A geocodificação Web Service Google, por exemplo, dá-lhe uma escolha.

Se você quer a resposta em formato XML, você usaria

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

Se você quisesse a resposta em JSON, você usaria

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

Embora semelhante em intenção, como você obter informações fora do XML e estruturas de dados JSON é bem diferente na execução.

Analisar uma resposta XML a partir da nuvem

Quando você usa um serviço web que é baseado na nuvem, a sua resposta pode estar em XML. Se, ao trabalhar com o seu serviço web baseado em nuvem, você tivesse que digitar o seguinte no seu navegador

https://maps.googleapis.com/maps/api/geocode/xml?sensor=trueaddress=Empire
Edifício estatal

você deseja obter de volta alguns XML - este, por exemplo:

# 133-40.7484395-73.9856709# 133-

Desde XML não se expressa exatamente em formas que são fáceis de entender, você teria, então, para analisar o que é que XML dá.

Lembre-se XML é composta por elementos que têm marcas de início e término. Para chegar à informação através do iCloud, você usa o NSXMLParser classe que usa o padrão de delegação. Aqui está como isso funciona:

NSXMLParser * XmlParser = [[NSXMLParser alloc] initWithdata: Dados] - [XmlParser setDelegate: self] - [XmlParser parse] -

Acontece que há quatro NSXMLParser métodos de delegado será de aplicação para analisar uma estrutura de dados XML:

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

analisador: didStartElement: namespaceURI: qualifiedName: atributos: permite que você saiba que o analisador tenha encontrado um elemento com um tag, por exemplo, e é até você para extrair os dados no analisador: foundCharacters: método.

Analisar uma resposta JSON a partir da nuvem

Quando você usa um serviço web que é baseado na nuvem, a sua resposta pode estar em JSON. Se, ao trabalhar com o seu serviço web baseado em nuvem, você tivesse que digitar o seguinte no seu navegador

https://maps.googleapis.com/maps/api/geocode/json?sensor=trueaddress=Empire 
Edifício estatal

você deseja obter de volta alguns JSON - o seguinte, por exemplo,

resultado {resultados: [{... geometria {{limites: {nordeste: {lat: 40.7489545,GNL: -73,98483449999999},sudoeste: {lat: 40.7479245,GNL: -73.9865073}},localização: {lat: 40.7484395,GNL: -73.9856709}, ...}

Desde JSON é tão enigmático como XML, você teria, então, para analisar o que é que lhe dá JSON.

Analisar JSON, no entanto, é bastante diferente da análise de XML. JSON é construído sobre duas estruturas são tranquilos familiarizado com - matrizes e dicionários. O seguinte exemplo de JSON usa tanto:

NSError * Erro = nil-NSDictionary * responseDict = [NSJSONSerialization JSONObjectWithdata: dados 
Opções: NSJSONReadingMutableContainers erro: Erro] -

Quando você faz a análise JSON, você tem algumas opções que podem ser configuradas, bem como:

  • NSJSONReadingMutableContainers: Os arrays e dicionários você voltar são mutáveis ​​para que você possa modificá-los. O padrão é imutável.

  • NSJSONReadingMutableLeaves: As cordas você voltar são mutáveis ​​para que você possa modificá-los. O padrão é imutável.

  • NSJSONReadingAllowFragments: Especifica que o analisador deve permitir que objetos de nível superior que não são matrizes ou dicionários. O padrão requer que os objetos de nível superior JSON para ser um matrizes ou dicionários.

Quando você usa o NSJSONSerialization classe, você (geralmente mas não necessariamente) voltar um array ou dicionário que pode incluir cordas e números e até mesmo outros arrays e dicionários (acho lista de propriedades objetos aqui).

Neste caso, você pode obter no local lat e lng fazendo

NSDictionary * resultado = [resultados objectAtIndex: 0] -NSDictionary * geometria = [resultado objectForKey: @ "geometria"] - NSDictionary * location = [geometria objectForKey: @ "location"] - latitude = [localização valueForKey: @ "lat"] -longitude = [localização valueForKey: @ "LNG"] -

menu