fermat Inviato 1 Febbraio 2012 Segnala Condividi Inviato 1 Febbraio 2012 ciao! sto cercando di leggere un file XML e riempire un NSMutableArray con i vari attributi dei nodi. ho provato così: + (NSMutableArray *) check { NSError *err = nil; NSMutableArray *result = [[NSMutableArray alloc] init]; NSURL *url = [NSURL URLWithString:@"http://www.google.com/ig/api?weather=roma&hl=it"]; NSXMLDocument *doc = [[NSXMLDocument alloc] initWithContentsOfURL:url options:(NSXMLNodePreserveWhitespace|NSXMLNodePreserveCDATA) error:&err]; NSXMLElement *element; NSArray *forecastInfo = [doc nodesForXPath:@"//xml_api_reply/weather/forecast_information" error:&err]; if([forecastInfo count] > 0) { for(int i = 0; i < [forecastInfo count]; i++) { element = [forecastInfo objectAtIndex:i]; [result addObject:[element childAtIndex:0]]; } } return result; } ma mi da errore: 2012-02-01 21:42:22.095 OBJCWeather[1937:707] *** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array 2012-02-01 21:42:22.103 OBJCWeather[1937:707] (........... penso che almeno un problema sia che così facendo prendo i valori dei nodi e nn gli attributi. ma i nodi nn hanno valori ma solo attributi. avete qualche idea? Mattepuffo.com Link al commento Condividi su altri siti Altre opzioni di condivisione...
fermat Inviato 1 Febbraio 2012 Autore Segnala Condividi Inviato 1 Febbraio 2012 ho provato anche in altro modo: + (NSMutableArray *) check { NSError *err = nil; NSMutableArray *result = [[NSMutableArray alloc] init]; NSURL *url = [NSURL URLWithString:@"http://www.google.com/ig/api?weather=roma&hl=it"]; if(!url) { NSLog(@"Errore nell'url"); exit(0); } NSXMLDocument *doc = [[NSXMLDocument alloc] initWithContentsOfURL:url options:(NSXMLNodePreserveWhitespace|NSXMLNodePreserveCDATA) error:&err]; NSXMLElement *rootElement = [doc rootElement]; NSArray *forecastInfo = [rootElement nodesForXPath:@"//weather/forecast_information" error:&err]; for(NSXMLElement *element in forecastInfo) { [result addObject:[element attributeForName:@"data"]]; } return result; } ma ottengo lo stesso errore. solo che nn riesco neanche a capire bene dove sia l'errore. nel senso che nn vedo una riga specifica. Mattepuffo.com Link al commento Condividi su altri siti Altre opzioni di condivisione...
fermat Inviato 2 Febbraio 2012 Autore Segnala Condividi Inviato 2 Febbraio 2012 ho fatto un'altra prova seguendo una guida: + (NSMutableArray *) check { NSString *city = @"roma"; NSMutableArray *result = [[NSMutableArray alloc] init]; NSXMLDocument *doc = [[NSXMLDocument alloc] initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.com/ig/api?weather=%@", city]] options:0 error:nil]; NSString *forecastInfoCity = [[[[doc nodesForXPath:@"/xml_api_reply/weather/forecast_information/city" error:nil] objectAtIndex:0] attributeForName:@"data"] stringValue]; [result addObject:forecastInfoCity]; return result; } solo che mi da lo stesso errore. vorrei capire se sbaglio nell'aggiungere valori all'array o prima. come posso stampare il valore di forecastInfoCity per vedere se è valorizzato? Mattepuffo.com Link al commento Condividi su altri siti Altre opzioni di condivisione...
Sam88 Inviato 3 Febbraio 2012 Segnala Condividi Inviato 3 Febbraio 2012 usa NSLog(@"%@",forecastInfoCity); che te lo stampa nella console di xcode Mobile & Web Developer | samuele@mr-apps.com | Mr.Apps Link al commento Condividi su altri siti Altre opzioni di condivisione...
fermat Inviato 3 Febbraio 2012 Autore Segnala Condividi Inviato 3 Febbraio 2012 mi da un bel null. però nn capisco dove sbaglio. possibile che mi manchi qualche libreria anche se xcode nn mi dice nulla? Mattepuffo.com Link al commento Condividi su altri siti Altre opzioni di condivisione...
Sam88 Inviato 4 Febbraio 2012 Segnala Condividi Inviato 4 Febbraio 2012 Non credo. NSString *forecastInfoCity = [[[[doc nodesForXPath:@"/xml_api_reply/weather/forecast_information/city" error:errore] objectAtIndex:0] attributeForName:@"data"] stringValue]; Prova a passargli un NSError e vedere se ti restituisce un errore. Mobile & Web Developer | samuele@mr-apps.com | Mr.Apps Link al commento Condividi su altri siti Altre opzioni di condivisione...
fermat Inviato 4 Febbraio 2012 Autore Segnala Condividi Inviato 4 Febbraio 2012 ho fatto così: + (NSMutableArray *) check { NSError *err; NSMutableArray *result = [[NSMutableArray alloc] init]; NSXMLDocument *doc = [[NSXMLDocument alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com/ig/api?weather=roma"] options:0 error:nil]; if(doc == NULL) { NSLog(@"Unable to parse"); } NSString *forecastInfoCity = [[[[doc nodesForXPath:@"/xml_api_reply/weather/forecast_information/city" error:&err] objectAtIndex:0] attributeForName:@"data"] stringValue]; [result addObject:forecastInfoCity]; return result; } nn ricevo alcun messaggio di errore nel log. Mattepuffo.com Link al commento Condividi su altri siti Altre opzioni di condivisione...
Sam88 Inviato 4 Febbraio 2012 Segnala Condividi Inviato 4 Febbraio 2012 Ho fatto un test con il codice che hai riportato sopra. Il problema è che il link che chiami non viene riconosciuto come valido da NSXMLDocument (lo puoi verificare passando un NSError e stampando l'errore a console con NSLog). Devi usare come option NSXMLDocumentTidyXML che fa un controllo per sistemare l'xml e così non da più errore. Ti consiglio di usare frequentemente il controllo degli errori e di stamparti i risultati nella console. Tra l'altro il controllo che hai messo non funziona e non ti stampa a console "Unable to parse" perché controlli che doc sia NULL invece essendo Objective C devi controllare se l'oggetto è nil o più semplicemente se scrivi if(!doc) { NSLog("Unable to parse"); } Mobile & Web Developer | samuele@mr-apps.com | Mr.Apps Link al commento Condividi su altri siti Altre opzioni di condivisione...
fermat Inviato 4 Febbraio 2012 Autore Segnala Condividi Inviato 4 Febbraio 2012 ah grazie mille! adesso funziona!! cmq il messaggio Unable to parse mi usciva. mi devo ancora abituare a questa sintassi. grazie per i consigli! Mattepuffo.com Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.