XMLドキュメントをダウンロードしてiPhoneアプリで解析するために使用する古いアプリケーションがあります。そのために使用しNSURLConnection
ました:
-(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];
}
}
で使用NSXMLParserDelegate
するAFXMLRequestOperation
ようになったため、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];
}
}
responseData
サーバーから受信したすべてのデータを変更可能な文字列に追加する方法は? ダウンロードの完了後に受信したデータをデバッグしたところ、xml にタグ区切り記号がありません<>
。xml データを取得する方法が不足していると思います。
PS:オブジェクトで xml を取得することが重要であることに注意してくださいNSMutableString
。
@フェルミ
あなたが推奨したように使用AFURLConnectionOperation
しましたが、目的には問題なく動作しますが、受信したデータがデリゲート メソッドによってキャッチされていないことに気付きました。代わりに、完了ブロックでデータを取得できます。
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"];
デリゲートNSURLConnection
メソッドが呼び出されないので、どうすれば失敗などを管理できますか? ありがとう。