Iphone 如何使用NSJSONSerialization输出数据?

Iphone 如何使用NSJSONSerialization输出数据?,iphone,ios,objective-c,nsdictionary,nsjsonserialization,Iphone,Ios,Objective C,Nsdictionary,Nsjsonserialization,我试图使用下面的代码,使用NSJSONSerialization输出一些数据 此日志语句工作于NSLog(@“publicData:%@”,publicData) 但当我试图获取字典NSLog(@“data:%@,[dict objectForKey:@“description]”)的“description”时,它崩溃了 我的错误消息:无法识别的选择器已发送到实例。由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[\uu NSCFDiction

我试图使用下面的代码,使用
NSJSONSerialization
输出一些数据

此日志语句工作于NSLog(@“publicData:%@”,publicData) 但当我试图获取字典
NSLog(@“data:%@,[dict objectForKey:@“description]”)的“description”时,它崩溃了

我的错误消息:
无法识别的选择器已发送到实例。由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[\uu NSCFDictionary objectAtIndex:]:无法识别的选择器已发送到实例…”

我已经包括了
NSLog
输出

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL
                                                          URLWithString:@"http://******.com/api/feed"]];

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSError *jsonParsingError = nil;
NSArray *publicData = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError];

NSLog(@"data from publicData: %@", publicData);
NSDictionary *dict;

for(int i=0; i<[publicData count];i++)
{
    dict= [publicData objectAtIndex:i];
    NSLog(@"data: %@", [dict objectForKey:@"description"]);

}


publicData: {
data =     (
            {
        address =             {
     address = "street address";
            city = cityname;
            lat = "42.000237034667";
            lng = "12.492805660226";
            province = provincename;
        };
        "category_id" = 20;
        description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum";
        id = 1;
        slug = "title-in-en";
        title = "title in En";
    },
            {
        address =             {
            address = "street address";
            city = cityname;
            lat = "42.000237034667";
            lng = "12.492805660226";
            province = provincename;
        };
        "category_id" = 20;
        description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum";
        id = 5;
        slug = "title-in-en";
        title = "title in En";
    },
NSURLRequest*request=[nsurlRequestRequestWithURL:[NSURL]
URLWithString:@“http://******.com/api/feed”];
NSData*响应=[NSURLConnection sendSynchronousRequest:request returningResponse:nil错误:nil];
N错误*jsonParsingError=nil;
NSArray*publicData=[NSJSONSerialization JSONObjectWithData:响应选项:0错误:&jsonParsingError];
NSLog(@“来自publicData的数据:%@”,publicData);
NSDictionary*dict;

for(int i=0;i我不知道这是否有效,但您应该尝试用以下内容替换for循环:

for(int i=0; i<[[publicData objectForKey:@"data"] count];i++)
{
    dict= [[publicData objectForKey:@"data"] objectAtIndex:i];
    NSLog(@"data: %@", [dict objectForKey:@"description"]);

}

for(int i=0;i我对codeplasma提供的代码进行了一些优化,如下所示:

 NSDictionary *publicData =  [NSJSONSerialization JSONObjectWithData:response
                                                                options:0              
                                                                  error:&jsonParsingError];
    NSArray *objects = [publicData objectForKey:@"data"];
    for(NSDictionary *element in objects) {
       NSLog(@"the description is %@",[element objectForKey:@"description"]);
    } 

您的publicData是
NSDictionary
而不是
NSArray

在您的情况下,
publicData
是一个NSDictionary,其中一个对象是键“数据”,而不是数组。使用
objectForKey
访问
NSDictionary
,而不是
objectAtIndex
@MarcusAdams,我以为我在这么做。在哪里“dict”是字典,publicData是nsarray。这不正确吗?谢谢!NSDictionary*dict;for(int i=0;ithanks,但我得到一个nsarray没有方法'objectForKey'错误。@hanumanDev您能在不使用NSLog的情况下发布完整的JOSN结构吗,可能来自您的borwser:)我刚刚编辑了上面的问题并添加了浏览器的输出。谢谢你的帮助!效果很好!我使用的是数组而不是字典。再次感谢!