Cập nhật: Tôi vừa kiểm tra định dạng JSON của mình được trả về từ máy chủ sử dụng JSONlint và điều đó là tốt.lỗi chọn không được nhận dạng với NSJSONSerialization + AFNetworking
Tôi nhận được ngoại lệ với NSJSONSerialization trong lệnh gọi AFNetworking tới tập lệnh php trả về dữ liệu JSON. Tôi đã xem xét các câu hỏi khác ở đây với cùng một vấn đề và đã thử các giải pháp đó nhưng vẫn gặp lỗi.
Nó bị treo trên dòng này:
NSError *e = nil;
NSMutableArray *jsonArray =
[NSJSONSerialization JSONObjectWithData: jsonData
options: NSJSONReadingMutableContainers
error: &e];
Lỗi Log:
2012-03-19 18: 10: 41,291 imageUploader [3538: 207] * Ngừng ứng dụng do ngoại lệ không xác định 'NSInvalidArgumentException', lý do: '- [__ NSCFArray bytes]: bộ chọn không được nhận dạng được gửi tới ví dụ 0x6867430'
dữ liệu JSON của tôi, khi tôi gọi là kịch bản php thông qua trình duyệt trông như thế này:
[{ "người sử dụng": "Binky", "con đường": "Binky-0a96f9aab5267c8.jpg"," chỉ mục ":" 101 "}, {" người dùng ":" binky "," đường dẫn ":" binky-9cf844252c28553.jpg "," chỉ mục ":" 102 "}, {" người dùng ":" binky "," đường dẫn " : "Binky-d6c749d25d33015.jpg", "chỉ số": "103"}]
các NSLog của dữ liệu trông như thế này:
( { chỉ mục = 101; path = "binky-0a96f9aab5267c8.jpg"; người dùng = binky; }, { chỉ mục = 102; path = "binky-9cf844252c28553.jpg"; người dùng = binky; }, { chỉ số = 103; path = "binky-d6c749d25d33015.jpg"; người dùng = binky; })
Cuối cùng, tôi làm một bài kiểm tra để chắc chắn rằng tôi có dữ liệu JSON hợp lệ:
if ([NSJSONSerialization isValidJSONObject: jsonData]){
NSLog(@"Good JSON \n");
}
Vì vậy, tôi không thể hiểu được đâu là nguồn gốc của lỗi của tôi là. Sự giúp đỡ nhỏ?
// AFNetworking hoạt động + khối
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];
}];
cảm ơn. Chuyển đổi jsondata đến thành 'NSMutableArray' hoạt động nhưng sau đó tôi không hiểu tại sao tôi cần' NSJSONSerialization' ở đây (nó được sử dụng trong rất nhiều mã ví dụ giống như của tôi). –