Domanda

Ho cercato di conoscere questo numero per settimane e ho ancora ottenere nulla. Sto usando l'ASIHTTPRequest e Ive inviata con successo i dati a un server e ora ho bisogno di ottenere la risposta XML, analizzare e salvare gli elementi a ciascun NSString etichettato in modo da poter inviare al server. Qualcuno ha un'idea su come fare questo?

È stato utile?

Soluzione

Da guardare il Come utilizzare , penso che quello che vuole fare è implementare metodi che possono essere chiamati quando la richiesta è completa. Per esempio, supponiamo di avere un metodo done: che si desidera essere chiamato quando la richiesta viene completata. È possibile impostare che il metodo come selettore "finito" in merito alla richiesta:

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease];
[request setDelegate:self];
[request setDidFinishSelector:@selector(done:)];

Poi, più tardi, si implementa il metodo done::

- (void)done:(ASIHTTPRequest *)request
{
   NSString *response = [request responseString];
}

Questo è tutto supponendo che si sta inviando le richieste in modo asincrono; se si sta utilizzando chiamate sincrone, si può semplicemente utilizzare la proprietà responseString in merito alla richiesta.

Altri suggerimenti

Ottenere una copia di una libreria XML per l'iPhone, se si dispone di diverso da esigenze di parsing XML banali.
Ho usato GDataXMLNode di Google per questo prima, ma avrei probabilmente usare KissXML per il lavoro futuro, perché è più vicino NSXML (la libreria di Apple che non nave per l'iPhone, purtroppo).

Ecco un modo per analizzare la risposta, qui sto cercando gli errori si potrebbe vedere in genere da un server Rails, lungo le linee di:

  <errors><error>Description of what went wrong</error></errors>

Si può vedere che ricevo l'oggetto 'richiesta' indietro dalla biblioteca, e ho alimentare la stringa di risposta in un GDataXMLDocument.

   GDataXMLDocument* root = [[GDataXMLDocument alloc] initWithXMLString:[request responseString] options:0 error:nil];

   // Parse the error strings
   NSArray* errors = [root nodesForXPath:@"//errors/error" error:nil];

   // What is the first error string.... etc......
   NSString* firstError = [[errors objectAtIndex:0] stringValue];

La matrice restituita qui contiene una lista di nodi che corrispondono a quel percorso in XML. Se non hai familiarità con XPath, non è difficile da imparare, e utile per tirare fuori i dati di una risposta XML. Chiamando stringValue contro l'elemento restituito nell'array restituirà il testo tra gli elementi nell'esempio precedente.

Ovviamente si può compilare un dizionario, ecc con i dati XML restituiti. Dare un senso?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top