2013-05-21 63 views
0

我有一個登錄屏幕,我POST用戶名和密碼登錄頁面。解析Json來處理並指導用戶查看控制器。目標C

如果登錄用戶的詳細信息是正確的,web服務給了我2個響應我收到請求的迴應。

{「值」:1}

,如果用戶信息有誤我從請求回來。

{ 「值」:0}

我已經能夠解析JSON結果給我

值的日誌輸出:1或值:0

我掙扎着處理解析的json例如

//parse out the json data 
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:urlData //1 
                options:kNilOptions 
                 error:&error]; 

NSArray* defineJsonData = [json objectForKey:@"value"]; //2 

NSLog(@"value: %@", defineJsonData); //3 

if ([[json objectForKey:@"value"] isEqualToNumber:[NSNumber numberWithInt:1]]) 
{ 

    HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]]; 
    HUD.mode = MBProgressHUDModeCustomView; 
    [HUD hide:YES afterDelay:0]; 
    [self performSegueWithIdentifier: @"introScreenView" sender:self]; 
} 

else { 
    HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]]; 
    HUD.mode = MBProgressHUDModeCustomView; 
    [HUD hide:YES afterDelay:0]; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Wrong Credentials" message:@"Please try to login again" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
} 

這是我的其餘代碼。

- (void)myTask { 

if ([userNameTextField.text isEqualToString:@""] || [passwordTextField.text isEqualToString:@""]) { 
    HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]]; 
    HUD.mode = MBProgressHUDModeCustomView; 
    [HUD hide:YES afterDelay:0]; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Feilds Missing" message:@"Please Fill all the field" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
    return; 
} 
NSString *data = [NSString stringWithFormat:@"UserName=%@&Password=%@",userNameTextField.text, passwordTextField.text]; 
NSData *postData = [data dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

// preaparing URL request to send data. 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ; 
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 
NSString *url = [NSString stringWithFormat:@"http://www.ddproam.co.za/Central/Account/LogOnIOS?"]; 
[request setURL:[NSURL URLWithString:url]]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setHTTPBody:postData]; 
[request setTimeoutInterval:7.0]; 

NSURLResponse *response; 
NSError *error; 

NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSString *str=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 

NSLog(@"Login response:%@",str); 

NSHTTPCookie *cookie; 
NSLog(@"name: '%@'\n", [cookie name]); 

for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) 
{ 
    NSLog(@"name: '%@'\n", [cookie name]); 
    NSLog(@"value: '%@'\n", [cookie value]); 
    NSLog(@"domain: '%@'\n", [cookie domain]); 
    NSLog(@"path: '%@'\n", [cookie path]); 
} 


//parse out the json data 
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:urlData //1 
                options:kNilOptions 
                 error:&error]; 

NSArray* defineJsonData = [json objectForKey:@"value"]; //2 

NSLog(@"value: %@", defineJsonData); //3 

if ([defineJsonData isEqual:0]) 
{ 
    HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]]; 
    HUD.mode = MBProgressHUDModeCustomView; 
    [HUD hide:YES afterDelay:0]; 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Wrong Credentials" message:@"Please try to login again" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
} 

else { 

    HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"37x-Checkmark.png"]]; 
    HUD.mode = MBProgressHUDModeCustomView; 
    [HUD hide:YES afterDelay:0]; 
    [self performSegueWithIdentifier: @"introScreenView" sender:self]; 
} 


if (theConnection) { 


} 
} 

回答

1

如果來自服務器的響應實際上只是{"value":1},那麼你正確解析JSON使用NSJSONSerialization到字典中。

但是,在value密鑰下,存在NSNumber的實例,而不是NSArray

你的代碼來檢索value並檢查它應該是這樣的:

NSNumber *defineJsonData = [json objectForKey:@"value"]; 

NSLog(@"value: %@", defineJsonData); 

if ([defineJsonData integerValue] == 0) { 
    NSLog(@"Wrong credentials"); 
} 
else { 
    NSLog(@"Welcome :-)"); 
} 
+0

我能使用的產品,以及我剛剛編碼自己,如果([JSON objectForKey:@「值」] isEqualToNumber:[NSNumber numberWithInt:1]]) –

+0

非常感謝。 –

+0

不客氣。是的,你的代碼有相同的結果。我的代碼比較標量值,比較數字作爲對象。這意味着有NSNumber對象('[NSNumber numberWithInt:1]'')的不必要的初始化 –