2013-02-18 248 views
2

我使用AFJSONRequestOperation請求遠程API:解析JSON響應

NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 

     //Remove the SVProgressHUD view 
     [SVProgressHUD dismiss]; 

     //Check for the value returned from the server 

     NSData *jsonData = [JSON dataUsingEncoding:NSUTF8StringEncoding];//This line cause crash 
     NSArray *arr = [NSJSONSerialization JSONObjectWithData:jsonData 
                 options:0 
                 error:nil]; 
     loginDic=[[NSDictionary alloc]init]; 
     loginDic=[arr objectAtIndex:0]; 
     NSLog(@"%@",loginDic); 

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 

     NSLog(@"Request Failed with Error: %@", [error.userInfo objectForKey:@"NSLocalizedDescription"]); 
    }]; 
    [operation start]; 
    [SVProgressHUD showWithStatus:@"Loading"]; 

然而,應用程序崩潰和我正在此錯誤:

[__NSCFDictionary dataUsingEncoding:]: unrecognized selector sent to instance 

下面是JSON對象的NSLog返回:

Result =  (
       { 
      operation = 5; 
      result = 1; 
     } 
    ); 

我是否錯過了一些東西,因爲我認爲我沒有解決問題g正確的JSON對象。請糾正我。

回答

1

看起來AFJSONRequestOperation被反序列化JSON的字典給你,然後你想再做一次。 JSON是一個NSDictionary,但你正在調用一個NSString方法。這一切的代碼

刪除:

NSData *jsonData = [JSON dataUsingEncoding:NSUTF8StringEncoding];//This line cause crash 
NSArray *arr = [NSJSONSerialization JSONObjectWithData:jsonData 
                options:0 
                error:nil]; 
loginDic=[[NSDictionary alloc]init]; 
loginDic=[arr objectAtIndex:0]; 

,取而代之的是:

loginDic = [[JSON objectForKey:@"Result"] lastObject]; 

(那將安全工作沒有檢查數組邊界,但假設有隻有一個元素的數組中)

1

您在成功塊中獲得的對象已被解析AFJSONRequestOperation。 你的情況你得到一個NSDictionary對象。

可以使用isKindofClass - 方法檢查類對象:

if ([JSON isKindOfClass:[NSDictionary class]]) { 
    NSDictionary* dict = (NSDictionary*)JSON; 
    ... 
}