gpt4 book ai didi

ios - NSJSONSerialization + AFNetworking 无法识别的选择器错误

转载 作者:可可西里 更新时间:2023-11-01 04:31:33 25 4
gpt4 key购买 nike

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

我在对返回 JSON 数据的 php 脚本的 AFNetworking 调用中遇到 NSJSONSerialization 异常。我在这里查看了具有相同问题的其他问题并尝试了这些解决方案,但仍然出现错误。

它在这一行崩溃:

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

错误日志:

2012-03-19 18:10:41.291 imageUploader[3538:207] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray bytes]: unrecognized selector sent to instance 0x6867430'

我的 JSON 数据,当我通过浏览器调用 php 脚本时如下所示:

[{"user":"binky","path":"binky-0a96f9aab5267c8.jpg","index":"101"},{"user":"binky","path":"binky-9cf844252c28553.jpg","index":"102"},{"user":"binky","path":"binky-d6c749d25d33015.jpg","index":"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; } )

最后,我进行测试以确保我拥有有效的 JSON 数据:

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

所以我无法理解我的错误来源在哪里。帮助不大?

//AFNetworking操作+ block

    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];
}];

最佳答案

显然,JSONObjectWithData 需要 NSData 而不是数组。id jsonData 似乎是一个数组,表示您的 json 字符串的内容。显然你无论如何都在期待一个数组。

出于某种原因,你做了两次。而不是

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

你可以简单地使用

NSMutableArray *jsonArray = [NSMutableArray arrayWithArray:jsonData];

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

NSArray *jsonArray = (NSArray *) jsonData;

但是,您应该始终测试它是否真的是 jsonData 中的数组。根据 json 字符串中的结构,它可能是 NSDictionary 或 nil(以防出错)。

关于ios - NSJSONSerialization + AFNetworking 无法识别的选择器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9778852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com