iOS 6 のみで解析失敗の問題に直面しています。コードは iOS 6 の以前のバージョンでは機能しますが、iOS 6 では機能しません。サーバー URL にログイン要求を送信しようとしています。サーバーからの応答を xml 形式で取得しています。NSXMLParser を使用して応答を解析しています。iOS 3.x、iOS 4.x、および iOS 5.x では xml を解析できますが、iOS 6 では解析に失敗します。
私はこれらの行を使用しています
NSXMLParser *m_parser = [[NSXMLParser alloc] initWithData:urlData];
[m_parser setDelegate:self];
BOOL parseFlag = [m_parser parse];//parsing failed in iOS 6
iOS 6 では のみ- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
が呼び出されます。
私が得ているエラーは NSXMLParserErrorDomain エラー 68 です。
詳細なソースコードは以下の通り。
-(IBAction)loginButtonPressed:(id)sender
{
NSMutableString *urlString = [[@"someURL" mutableCopy] autorelease];
[urlString appendString:@"loginAuthenticate"];
[urlString appendFormat:@"?username=%@",m_username.text];
[urlString appendFormat:@"&password=%@",pwd];
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSString *postLength = [NSString stringWithFormat:@"%d", [urlString length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"text/xml; charset=utf-16" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[urlString dataUsingEncoding:NSUTF16StringEncoding]];
NSError *error;
NSURLResponse *response;
NSData *urlData;
urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *responseXml = [[NSString alloc] initWithData:urlData encoding:NSUTF16StringEncoding];
if (responseXml &&[responseXml length]>0)
{
NSXMLParser *m_parser = [[NSXMLParser alloc] initWithData:urlData];
[m_parser setDelegate:self];
NSLog(@"urlData:%@",m_parser);
BOOL parseFlag = [m_parser parse];//parsing failed in iOS 6
if (parseFlag == 1)
NSLog(@"parseFlag = YES");//called if iOS version is less than iOS 6
else
{
NSLog(@"parseFlag = NO");//called if iOS version is iOS 6
}
.
.
}
// This delegate method is called in iOS 6 only
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
NSLog(@"%@",@"parseErrorOccured");
NSLog(@"parseError:%@",parseError);
//error is NSXMLParserErrorDomain error 68
}