4

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
    }
4

0 に答える 0