NSJSONSerialization + AFNetworking无法识别select器错误

更新:我刚刚testing了从服务器使用JSONlint返回的JSON格式,这很好。

我在NSJSONSerialization的AFNetworking调用一个PHP脚本返回JSON数据exception。 我已经在这里看到了其他问题,并尝试了这些解决scheme,但仍然遇到了错误。

它在这条线上崩溃:

NSError *e = nil; NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData: jsonData options: NSJSONReadingMutableContainers error: &e]; 

错误日志:

2012-03-19 18:10:41.291 imageUploader [3538:207] *由于未捕获的exception'NSInvalidArgumentException',原因:' – [__ NSCFArray字节]:无法识别的select器发送到实例0x6867430'

我的JSON数据,当我通过浏览器调用PHP脚本看起来像这样:

[{ “用户”: “宾基”, “path”: “宾基-0a96f9aab5267c8.jpg”, “索引”: “101”},{ “用户”: “宾基”, “path”:“宾基-9cf844252c28553.jpg ”, “索引”: “102”},{ “用户”: “宾基”, “path”: “宾基-d6c749d25d33015.jpg”, “索引”: “103”}]

数据的NSLog如下所示:

({index = 101; path =“binky-0a96f9aab5267c8.jpg”; user = binky;},{index = 102; path =“binky-9cf844252c28553.jpg”; user = binky;},{index = 103; path = “binky-d6c749d25d33015.jpg”; user = binky;})

最后,我做了一个testing,以确保我有有效的JSON数据:

  if ([NSJSONSerialization isValidJSONObject: jsonData]){ NSLog(@"Good JSON \n"); } 

所以我不明白我的错误的来源在哪里。 帮助不大?

// AFNetworking操作+块

  AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:myRequest success:^(NSURLRequest *request, NSHTTPURLResponse *response, id jsonData) { NSLog(@"Success JSON data:\n %@ \n", jsonData); //log data if ([NSJSONSerialization isValidJSONObject: jsonData]){ NSLog(@"Good JSON \n"); } NSError *e = nil; NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData: jsonData options: NSJSONReadingMutableContainers error: &e]; if (!jsonArray) { NSLog(@"Error parsing JSON: %@", e); } else { for(NSDictionary *item in jsonArray) { NSLog(@"Item: %@", item); } } [self.navigationController popToRootViewControllerAnimated:YES]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { NSLog(@"Error: %@", error); [self.navigationController popToRootViewControllerAnimated:YES]; }]; 

Aparently JSONObjectWithData期望NSData而不是一个数组。 ID jsonData似乎是一个数组表示您的JSONstring的内容。 无论如何,你无论如何都期待着一个数组。

出于某种原因,你正在做两次。 代替

  NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData: jsonData options: NSJSONReadingMutableContainers error: &e]; 

你可以简单地使用

 NSMutableArray *jsonArray = [NSMutableArray arrayWithArray:jsonData]; 

或者,如果它不必是可变的:

 NSArray *jsonArray = (NSArray *) jsonData; 

但是,你应该总是testing它是否真的在jsonData中的数组。 根据jsonstring中的结构,它可能是一个NSDictionary或nil在错误的情况下。