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在错误的情况下。