2012-01-24 3 views
0

Я пытаюсь нажать REST api, чтобы узнать, действителен ли пользователь. Я знаю, что работает connectionDidFinishLoading, но я не уверен, как проверить ответ (xml). Пожалуйста, порекомендуйте.xml post loading xml response

signIn функция получает мяч прокатки

- (IBAction)signIn:(id)sender; 
{ 
    [emailError setHidden:YES]; 

    if([emailAddressTxt text] && [passwordTxt text]) { 
     // send user/pass to server for validation 
     if([self NSStringIsValidEmail:[emailAddressTxt text]]) { 
      NSString *post = [NSString stringWithFormat:@"Email=%@&Password=%@", emailAddressTxt.text, passwordTxt.text]; 
      NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

      NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

      NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
      [request setURL:[NSURL URLWithString:@"http://www.mySite.com/validate.php"]]; 
      [request setHTTPMethod:@"POST"]; 
      [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
      [request setHTTPBody:postData]; 
      [NSURLConnection connectionWithRequest:request delegate:self]; 
     } 
    } else { 
     // give error dialogue 
     [emailError setText:@"User not found"]; 
     [emailError setHidden:NO]; 
    } 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    //[signInData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d { 
    //[signInData appendData:d]; 
    // updated to: 
    signInData = (NSMutableData *)d; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    // Fail.. 
    [emailError setText:@"Connection Error"]; 
    [emailError setHidden:NO]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSString *responseText = [[NSString alloc] initWithData:signInData encoding:NSUTF8StringEncoding]; 

    NSLog(@"%@", @"check"); 
    NSLog(@"%@", responseText); 
} 

// an example response would be: 
// <string xmlns="http://thedomain.com/">invalid login</string> 
+0

Вы спрашиваете, как разобрать xml-ответ? – cpjolicoeur

ответ

2

Обычно для анализа XML вы бы использовать NSXMLParser, но с ответом строки просто, как «<string xmlns="http://thedomain.com/">invalid login</string>» Я предполагаю, что действительный Войти будет выглядеть следующим образом : «<string xmlns="http://thedomain.com/">valid login</string>»

Если это так, вы можете просто искать ответ, который содержит строку @"valid login", но не содержит @"invalid login"

if (([responseText rangeOfString:@"invalid login"].location == NSNotFound) && ([responseText rangeOfString:@"valid login"].location != NSNotFound)){ 
    // Congrats valid 
} 

Если (еще лучше) успешный ответ будет «<string xmlns="http://thedomain.com/">successful login</string>», то инструкция if будет легче следовать.

if ([responseText rangeOfString:@"successful login"].location != NSNotFound){ 
    // Congrats valid 
} 
+0

Я полностью изменил способ загрузки XML, но это решение работает для моего «простого» разбора. – Jacksonkr