Uzyskaj wszystkie pobrane dane XML
Mam przestarzałą aplikację, która służy do pobierania dokumentu XML i analizowania go w aplikacji na iPhone'a. UżyłemNSURLConnection
w tym celu:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
//NSLog(@"Response :%@",response);
responseData = [[NSMutableString alloc] init];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSString *str = [[NSString alloc] initWithData:data
encoding:NSASCIIStringEncoding];
[responseData appendString:str];
[str release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"DATA : %@",responseData);
if (responseData != nil) {
[self startParsing:responseData];//Parse the data
[responseData release];
}
}
Od przeniesienia do użyciaNSXMLParserDelegate
zAFXMLRequestOperation
, Nie mogę znaleźć sposobu na poprawne pobranie danych XML:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
[responseData appendString:elementName];
[responseData appendString:namespaceURI];
[responseData appendString:qName];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
[responseData appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
[responseData appendString:elementName];
[responseData appendString:namespaceURI];
[responseData appendString:qName];
}
-(void) parserDidEndDocument:(NSXMLParser *)parser{
[SVProgressHUD showSuccessWithStatus:@"Downloading completed"];
NSLog(@"DATA : %@",responseData);//not properly appended, tags delimeters are missing
if (responseData != nil) {
[self startParsing:responseData];
[responseData release];
}
}
Jak dołączyć wszystkie dane otrzymane z serwera wresponseData
zmienny ciąg? Zdebugowałem dane otrzymane po zakończeniu pobierania, a xml brakuje znaczników delimitera<>
. Myślę, że brakuje mi sposobu na uzyskanie danych xml.
P.S: Pamiętaj, że ważne jest, aby pobrać xml w aNSMutableString
obiekt.
@Fermi
użyłemAFURLConnectionOperation
jak poleciłeś, działa dobrze z moim celem, ale zauważyłem, że moje odebrane dane nie są wychwytywane przez metody delegowane, zamiast tego mogę uzyskać dane w bloku uzupełniania:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:API_URL]];
AFURLConnectionOperation *operation = [[AFURLConnectionOperation alloc] initWithRequest:request];
operation.completionBlock = ^{
NSLog(@"Complete: %@",operation.responseString);//responseString is my data
};
[operation start];
[SVProgressHUD showWithStatus:@"Downloading files"];
wo odkądNSURLConnection
metody delegowania nie są wywoływane, jak mogę zarządzać awarią itp.? Dzięki.