我已经花了好几个小时试图解决这个问题,但无济于事——似乎我唯一的选择是在这里发帖,看看是否有人能对这个问题有所了解。这可能是 AFNetworking 的问题,或者(更有可能)是我的代码的问题。
我使用的代码完美适用于我的应用程序中 99% 的操作。我正在开发一个应用程序,它通过构建 JSON 搜索、发送它们并接收来自服务器的响应来利用 Elastic Search。
以下是返回的 JSON 示例:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": null,
"hits": [
{
"_index": "asx",
"_type": "61a88d3848b00655d9aa59db70847318",
"_id": "b91f9257744fedb4ef1c127e275c127c",
"_score": null,
"_source": {
"value": "22/06/1998"
},
"sort": [
4.439049394553e-312
]
}
]
}
}
现在,将其插入 jsonlint.com(并且对 JSON 格式有所了解),很容易看出这是有效的 JSON。
我正在使用 AFHTTPClient 子类来发布我的请求并接收数据。这是我用来发布的代码:
[super postPath:path parameters:parameters success:^(AFHTTPRequestOperation *operation, NSDictionary *response) {
NSData *responseData = [(AFJSONRequestOperation *)operation responseData];
NSDictionary *responseDictionary;
if (responseData != nil) {
responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:NULL];
}
if (success) {
success(operation, responseDictionary);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSData *responseData = [(AFJSONRequestOperation *)operation responseData];
NSDictionary *responseDictionary;
if (responseData != nil) {
responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:NULL];
}
if (failure) {
failure(operation, error, responseDictionary);
}
}];
这里没什么特别的,我只是将响应转换为一些 JSON。
然而,问题在于,对于这个特定的请求,AFNetworking 将响应视为失败,因此失败块中的代码是唯一正在执行的代码。我收到以下错误:
(lldb) po error
$1 = 0x0adbc710 Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Number wound up as NaN around character 279.) UserInfo=0xad968d0 {NSDebugDescription=Number wound up as NaN around character 279.}
JSON 中包含一个指数数字(具体为 4.439049394553e-312),但这是有效数字并且应该能够被解析。当我尝试使用 NSJSONSerialization 解析响应数据时,我得到了相同的 NSError。澄清一下——AFNetworking 给我的错误信息与 NSJSONSerialization 相同。
我找不到与我有同样问题的其他人,也无法弄清楚为什么我的 JSON 无法解析。它给我的应用程序留下了一个我无法修复的非常大的错误。
如果有人能对这个问题有所了解,那就太好了。如果这不是 AFNetworking 的问题,如果你能指出一个有用的资源,那也很棒。当然,如果您需要更多信息,请询问
谢谢你。