我是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)”消息,因为它还有很多。
我该怎么办? 谢谢你们。
答案 0 :(得分:2)
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]
)。