JSON请求错误

萨姆·菲舍尔

我第一次在Objective-C中尝试JSON。

这是我的终端应用程序的代码:

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://itunes.apple.com/search?term=harry&country=us"]];
        NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
        NSError *jsonParsingError = nil;
        NSArray *publicTimeline = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError];
        NSDictionary *list;
        for(int i=0; i<[publicTimeline count];i++)
        {
            list = [publicTimeline objectAtIndex:i];
            NSLog(@"Statuses: %@", [list objectForKey:@"trackName"]);
        }
    }
    return 0;
}

这是我得到的错误:

2013-09-11 20:58:55.524 Tweets[7291:303] -[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x100391d60
2013-09-11 20:58:55.526 Tweets[7291:303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x100391d60'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff91688b06 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff8bf8a3f0 objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff9171f40a -[NSObject(NSObject) doesNotRecognizeSelector:] + 186
    3   CoreFoundation                      0x00007fff9167702e ___forwarding___ + 414
    4   CoreFoundation                      0x00007fff91676e18 _CF_forwarding_prep_0 + 232
    5   Tweets                              0x0000000100000d1a main + 378
    6   libdyld.dylib                       0x00007fff908e67e1 start + 0
)
libc++abi.dylib: terminate called throwing an exception

怎么了?我已完全按照教程进行操作,但我是唯一遇到错误的人。

额外的专业知识

我运行了您的代码。我的结果与您的不同。我没有崩溃,但是我确实收到(null)了最后的NSLog电话。

是的,您应该检查的结果+[NSJSONSerialization JSONObjectWithData:options:error]正如@HotLicks正确地向您指出的那样,如果您得到的结果为nil,则检查错误对象可以揭示出哪里出了问题的重要线索。

但是在这种情况下,这是学术性的,因为结果(就我而言)并非如此nil真正的问题,然而,就是你没有出现有数据的模式的理解。jsonObject是一本字典,但是它只有两个键,results而和resultCount,这就是为什么您得到零的原因[jsonObject objectForKey:@"trackName"]trackName不是关键之一。

但是,您确实获得的那两个键应该告诉您很多。它告诉我足够尝试此操作:

NSArray *results = [jsonObject objectForKey:@"results"];
NSDictionary *dictionary = [results objectAtIndex:0];
id latestLoans = [dictionary objectForKey:@"trackName"];

并得到结果:

Harry Potter and the Deathly Hallows - Part 1

换句话说,我只是简单地获得了数组中的第一个字典results,并向它查询了它所具有的对象trackName

由于您最初要求的是数组,因此我猜测您需要该特定键的所有值,因此,如果使用此命令:

NSArray *latestLoans = [jsonObject valueForKeyPath:@"results.trackName"];

它在trackName键下的词典中提供了与相对应的50个值的列表results

编辑:

您真正需要做的另一件事是通过在调用其他任何内容之前进行检查来保护自己免受nil呼叫返回的可能-[NSData initWithContentsOfURL:]仅此一项并不能解决您无法获得响应的问题,但是可以避免崩溃。如果确实收到nil,请确保检查返回的错误对象domaincode属性,以了解发生了什么问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JSON请求android错误

来自分类Dev

RestSharp JSON POST 请求遇到错误请求

来自分类Dev

json api获取请求错误

来自分类Dev

JSON请求错误而不是常规错误

来自分类Dev

播放Scala:捕获HTTP JSON请求错误

来自分类Dev

使用Python加载JSON请求错误的类型

来自分类Dev

SpringMVC 400错误的请求JSON数据

来自分类Dev

Coinbase Pro发布请求-格式错误的JSON

来自分类Dev

春季-当对json使用DELETE返回错误请求

来自分类Dev

jQuery AJAX请求JSON上的'parseerror'错误

来自分类Dev

使用Python加载JSON请求错误的类型

来自分类Dev

播放Scala:捕获HTTP JSON请求错误

来自分类Dev

超时错误:Pandas 中的 JSON 请求

来自分类Dev

JavaScript 请求 JSON 信息。返回错误的结果

来自分类Dev

Json 代码验证错误 Curl Post 请求

来自分类Dev

Jersey Post 请求 405 Json 消耗错误

来自分类Dev

Python放置请求。Spotify API放置请求格式错误的Json

来自分类Dev

JSON请求发送到Jersey导致“ 400错误请求”

来自分类Dev

HTTP请求JSON:意外的.parse错误-如何消除该错误?

来自分类Dev

尝试发布大型JSON数据时出现错误的请求错误

来自分类Dev

XML 请求返回错误的请求响应,而 json 请求有效

来自分类Dev

包含NaN的Json数据在ajax请求期间导致错误

来自分类Dev

JSON请求时Laravel 5中的简单错误响应

来自分类Dev

错误请求MVC时如何返回JSON对象

来自分类Dev

400错误的请求将JSON POST发送到REST

来自分类Dev

带有错误请求的MVC JSON响应

来自分类Dev

将JSON发布到Controller返回400错误请求

来自分类Dev

Laravel 5.2 JSON请求错误的api_token响应

来自分类Dev

用户脚本AJAX请求给出JSON-RPC错误-32700

Related 相关文章

热门标签

归档