2013-12-16 6 views
0

내 작업은 url을 통해 사용자 이름과 암호를 보내서 xml 데이터를 구문 분석하여 로그인 양식을 작성하고 xml을 구문 분석해야합니다. 이제 url에서 XML 데이터를 성공적으로 파싱했습니다. 이제 문제는 구문 분석 된 XML에서 상태 데이터를 읽을 수 없습니다. 여기서 for 루프는 실행되지 않습니다. pls이 일하는 방법을 도와주세요. 여기 (파싱 된 XML의 출력) 여기 내 코드Objective-C : For 루프가 실행되지 않습니까?

#import "RTVersion1ViewController.h" 

@interface RTVersion1ViewController() 

@end 

@implementation RTVersion1ViewController 
@synthesize user,pass,username,pass1,webData,stat,sessid; 
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"root"]) { 
     //Initialize the array. 
     rssOutputData = [[NSMutableArray alloc] init]; 
    } 
    else if([elementName isEqualToString:@"userDetails"]) { 
     //Initialize the book. 
     aLogin = [[Login alloc] init]; 
     //Extract the attribute here. 
     aLogin.userId = [[attributeDict objectForKey:@"userId"] integerValue]; 
     NSLog(@"Reading id value :%d", aLogin.userId); 
    } 
    NSLog(@"Processing Element: %@", elementName); 
} 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    if(!nodecontent) 
     nodecontent = [[NSMutableString alloc] initWithString:string];else 
      [nodecontent appendString:string]; 
    NSLog(@"Processing Value: %@", nodecontent); 
} 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if([elementName isEqualToString:@"root"]) 
     return; 
    if([elementName isEqualToString:@"userDetails"]) { 
     [rssOutputData addObject:aLogin]; 
     [aLogin release]; 
     aLogin= nil; 
    } 
    else 
     [aLogin setValue:nodecontent forKey:elementName]; 
    [nodecontent release]; 
    nodecontent = nil; 
} 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] 
            initWithTarget:self 
            action:@selector(dismissKeyboard)]; 

    [self.view addGestureRecognizer:tap]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSString *firstName = [defaults objectForKey:@"firstname"]; 
    NSString *lastName = [defaults objectForKey:@"lastname"]; 
    user.text = firstName; 
    pass.text = lastName; 
    // Do any additional setup after loading the view, typically from a nib. 
} 
-(void)viewDidAppear:(BOOL)animated { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    // check if user is alraidy Login 
    if([defaults objectForKey:@"firstname"]!=nil && [defaults objectForKey:@"lastname"]!=nil){ 
    [self performSegueWithIdentifier:@"login" sender:defaults]; 
    } 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
-(void)dismissKeyboard { 
    [user resignFirstResponder]; 
    [pass resignFirstResponder]; 
} 

- (void)dealloc { 
    [user release]; 
    [pass release]; 
    [super dealloc]; 
} 
- (void) alertStatus:(NSString *)msg :(NSString *)title 
{ 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title 
                 message:msg 
                 delegate:self 
               cancelButtonTitle:@"Ok" 
               otherButtonTitles:nil, nil];  
    [alertView show]; 
} 
- (IBAction)Submit:(id)sender { 
    username =user.text; 
    pass1 = pass.text; 
    if([user.text isEqualToString:@"" ]|| [pass.text isEqualToString:@""]) 
    { 
     [self alertStatus:@"Please enter both Username and Password" :@"Login Failed!"]; 
     //greeting.text = @"Input Your Value"; 
     [user resignFirstResponder]; 
     [pass resignFirstResponder]; 
     return; 
    } 
    NSLog(@"%@%@",username,pass1); 
    NSString *post =[[NSString alloc] initWithFormat:@"username=%@&password=%@",username,pass1]; 
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
    //NSURL *url = [NSURL URLWithString:@"http://192.168.1.164:8080/RestoreTogether/userProfile/verifyUserDetail1"]; 
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
    // [theRequest addRequestHeader:@"Content-Type" value:@"application/xml"]; 
    [theRequest setHTTPMethod:@"POST"]; 
    [theRequest setValue:@"application/xml" forHTTPHeaderField:@"Accept"]; 
    [theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [theRequest setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [theRequest setHTTPBody:postData]; 
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 
    if(theConnection) 
    { 
     webData = [[NSMutableData data] retain]; 
     NSLog(@"%@",webData); 
    } 
    } 
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [webData setLength: 0]; 
} 
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [webData appendData:data]; 
} 
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    [webData release]; 
    [connection release]; 
} 
-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    samplearray = [[NSMutableArray alloc]init]; 
    xmlParserObject = [[NSXMLParser alloc] initWithData:webData]; 
    [xmlParserObject setDelegate:self]; 
    [xmlParserObject parse]; 
    for (int i =0; i<[rssOutputData count]; i++) { 
     Login *log = [rssOutputData objectAtIndex:i]; 
     sessid = log.userId; 
     NSLog(@"%d",sessid); 
     stat = log.status; 
     NSLog(@"%@",stat); 
     [samplearray addObject:log]; 
    } 

    [connection release]; 

} 

@end 

입니다 여기에

-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 
     samplearray = [[NSMutableArray alloc]init]; 
     xmlParserObject = [[NSXMLParser alloc] initWithData:webData]; 
     [xmlParserObject setDelegate:self]; 
     [xmlParserObject parse]; 
     for (int i =0; i<[rssOutputData count]; i++) { 
      Login *log = [rssOutputData objectAtIndex:i]; 
      sessid = log.userId; 
      NSLog(@"%d",sessid); 
      stat = log.status; 
      NSLog(@"%@",stat); 
      [samplearray addObject:log]; 
     } 

     [connection release]; 

    } 

를 작동하지 않는 루프 콘솔 출력입니다 :

2013-12-16 18:37:21.498 RTVersion1[3238:c07] [email protected] 
2013-12-16 18:37:21.501 RTVersion1[3238:c07] <> 
2013-12-16 18:37:21.604 RTVersion1[3238:c07] Processing Element: root 
2013-12-16 18:37:21.604 RTVersion1[3238:c07] Processing Element: userDetail 
2013-12-16 18:37:21.604 RTVersion1[3238:c07] Processing Element: userId 
2013-12-16 18:37:21.604 RTVersion1[3238:c07] Processing Value: 20 
2013-12-16 18:37:21.605 RTVersion1[3238:c07] Processing Element: userFirstName 
2013-12-16 18:37:21.605 RTVersion1[3238:c07] Processing Value: u1 
2013-12-16 18:37:21.605 RTVersion1[3238:c07] Processing Element: userLastName 
2013-12-16 18:37:21.605 RTVersion1[3238:c07] Processing Value: u 
2013-12-16 18:37:21.605 RTVersion1[3238:c07] Processing Element: userUserType 
2013-12-16 18:37:21.605 RTVersion1[3238:c07] Processing Value: INDIVIDUAL 
2013-12-16 18:37:21.605 RTVersion1[3238:c07] Processing Element: userUserName 
2013-12-16 18:37:21.606 RTVersion1[3238:c07] Processing Value: [email protected] 
2013-12-16 18:37:21.606 RTVersion1[3238:c07] Processing Element: status 
2013-12-16 18:37:21.606 RTVersion1[3238:c07] Processing Value: true 
2013-12-16 18:37:21.606 RTVersion1[3238:c07] Processing Element: sessionvalue 
2013-12-16 18:37:21.606 RTVersion1[3238:c07] Processing Value: 1_MX40NDQ1OTU2Mn5-VGh1IERlYyAwNSAwMjo0NjozNCBQU1QgMjAxM34wLjc1MTEzNTV- 
2013-12-16 18:37:21.606 RTVersion1[3238:c07] Processing Element: tokenvalue 
2013-12-16 18:37:21.607 RTVersion1[3238:c07] Processing Value: T1==cGFydG5lcl9pZD00NDQ1OTU2MiZzZGtfdmVyc2lvbj10YnJ1YnktdGJyYi12MC45MS4yMDExLTAyLTE3JnNpZz1jYjhhMjZmODQxNGUyNWM4Yzc3OWU4YzE3MTQ5ZmI4ZmYyOWFiMDE2OnJvbGU9cHVibGlzaGVyJnNlc3Npb25faWQ9MV9NWDQwTkRRMU9UVTJNbjUtVkdoMUlFUmxZeUF3TlNBd01qbzBOam96TkNCUVUxUWdNakF4TTM0d0xqYzFNVEV6TlRWLSZjcmVhdGVfdGltZT0xMzg2MjQwNDM1Jm5vbmNlPTAuNTgzNzUzMzA4MzA2MTc3OSZleHBpcmVfdGltZT0xMzg4ODMyMjY5JmNvbm5lY3Rpb25fZGF0YT0= 

Pls는 저에게 친구를 도와 미리 감사드립니다.

+1

'rssOutputData.count'가 1보다 작습니다. –

+0

[rssOutputData count]를 출력하여 확인하십시오. – Vame

+0

값이 0임을 나타냅니다. – Naresh

답변

1

[rssOutputData count]은 시작시 0입니다. , 성공적으로 구문 분석 한 후 데이터를 가져옵니다.

[xmlParserObject parse] 바로 뒤에 루프를 넣을 것입니다.

[xmlParserObject parse]; 
     for (int i =0; i<[rssOutputData count]; i++) { 

파서에서 완전한 결과를 얻은 후 루프를 배치하십시오. 그래서 viewDidLoad 또는 모델/클래스의 init로 이동 rssOutputData = [[NSMutableArray alloc] init];didEndElement

if([elementName isEqualToString:@"root"]) 
//Your for loop should be here, 
     return; 
+0

나는 그것을 수행했습니다. 나는 내 루프를 파서 만 넣고 didStartElement 내 배열을 선언했다. – Naresh

+0

nop, 그 문제는 아니다. [xmlParserObject parse] 바로 뒤에 for 루프를 넣고 파싱을 아직 시작하지 않았다. – Rajneesh071

+0

그것은 id 값을 0으로 표시하고 상태 값을 null로 – Naresh

3

내부 루프를 들어 당신을 넣어.

위임자에서 여러 번 사용하고 할당하는 것은 잘못되었습니다. 당신의 XML로

-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"root"]) { 
     //Initialize the array. 
     rssOutputData = [[NSMutableArray alloc] init]; 
+0

여전히 움직여 같은 문제가 발생합니다. – Naresh

0

는 "userDetail"태그가 당신은 당신의 파서 "의 UserDetails"을 찾습니다 didStartElement : 방법. 나는 이것이 당신의 문제의 이유라고 생각하고 여분의 "s"를 제거하고 당신은 로그인 항목을 얻을 것입니다.

관련 문제