使用Webservice和json解析进行排名

时间:2014-03-17 20:50:09

标签: ios objective-c json web-services

我是Objective-c的新手,并试图学习一些事情。

我正在使用带有php的网络服务创建一个sprite-kit游戏和在线排名。

现在,我只需要获得一个返回前十名/得分的json。

我这样做:

NSMutableArray * nomes;     NSMutableArray *得分;

NSData* jsonDados = [[NSData alloc] initWithContentsOfURL:
                     [NSURL URLWithString:@"http://www.420blazeitswag.com/wsGame/functions.php?funcao=getRanking"]];


NSError *error;

NSMutableDictionary *jsonRanking = [NSJSONSerialization
                                    JSONObjectWithData:jsonDados
                                    options:NSJSONReadingMutableContainers
                                    error:&error];
NSDictionary* ranking = [jsonRanking objectForKey:@"ranking"];

resultado = [NSMutableArray alloc];
nomes = [ranking objectForKey:@"NOME"];
scores = [ranking objectForKey:@"SCORE"];

NSLog(@"count: %lu\n",[ranking count]);

for(int i=0;i<[ranking count];i++){
     [resultado addObject:[NSDictionary dictionaryWithObjectsAndKeys:nomes[i],@"nome",scores[i],@"score", nil]];
    NSLog(@"Nome: %@ Score: %@",nomes[i],scores[i]);
}

一旦我执行此代码,我就会收到“CFNetwork SSLHandshake failed(-9806)”消息,因为它还有很多。

我该怎么办? 谢谢你们。

2 个答案:

答案 0 :(得分:2)

{{2p>将其更改为

    NSDictionary* ranking = [jsonRanking objectForKey:@"ranking"];

resultado = [NSMutableArray alloc];
nomes = [ranking objectForKey:@"NOME"];
scores = [ranking objectForKey:@"SCORE"];

NSLog(@"count: %lu\n",[ranking count]);

for(int i=0;i<[rankingList count];i++){
     [resultado addObject:[NSDictionary dictionaryWithObjectsAndKeys:nomes[i],@"nome",scores[i],@"score", nil]];
    NSLog(@"Nome: %@ Score: %@",nomes[i],scores[i]);
}

答案 1 :(得分:1)

这一行:

NSDictionary* ranking = [jsonRanking objectForKey:@"ranking"];

不正确,因为密钥"ranking"的值为NSArray。在那个数组里面你有很多字典。因此,您需要迭代'ranking'数组并单独处理每个字典。

查看您的代码,resultado和您返回的JSON之间的唯一不同(因此ranking的内容是键的大小写,因此您可能不需要在所有...

开始于:

NSArray *ranking = [jsonRanking objectForKey:@"ranking"];

目前尚不清楚为什么会收到SSL错误消息,因为您加载的JSON来自http站点,似乎没有任何重定向。在解决之前,您需要确定SSL错误消息的来源。

除了:

不要只做:[NSMutableArray alloc]。致电init后,请务必致电alloc方法。如果您不想alloc init,请使用类便捷方法(例如[NSMutableArray array])。