-2

我正在为一家游戏服务器公司开发一个应用程序,该应用程序的一部分要求用户查看他或她的游戏服务器的列表,以及它们是否在线、离线、有多少玩家、服务器名称等. 这些数据都可以在从 MySQL 数据库更新的 Web 上托管的 JSON 文件中找到。

使用下面的代码,我似乎无法让它工作。现在,请理解这是我第一次使用 JSON 并且别无选择,因为这是客户要求的。我和我的搭档谈过,但他似乎无法自己调试问题。

我得到的错误是这样的:

No visible @interface for 'NSArray' declares the selector 'objectForKey:'

我已经尝试了几个版本的代码,但都没有成功。

如果您能帮助我调试此代码并使其与底部附近的注释掉部分一起使用服务器名称、在线玩家和状态(0=离线、1=在线、2)更新 TableViewCells,将不胜感激=忙,3=暂停,-1=无法启动)。

请注意,JSON 文件的格式必须保持原样,并且只能进行非常小的更改。

谢谢你,迈克尔 S。

我的头文件:

我的主文件:

我的 JSON 文件:

{
    "status": "OK",
    "error": "",
    "debug": "2 server(s)",
    "result": {
        "servers": [
            {
                "id": 1,
                "title": "Test",
                "players": 0,
                "slots": 10,
                "status": 3
            },
            {
                "id": 2,
                "title": "Creative Spawn",
                "players": 0,
                "slots": 5,
                "status": -1
            }
        ]
    }
}

给我错误的块是:

NSArray *serverResults = [[news objectForKey:@"result"] objectForKey:@"servers"];

if ([[[serverResults objectAtIndex:indexPath.row] objectForKey:@"status"] isEqual:@"1"]) {
    serverPlayers.text = @"10000000";
}
4

1 回答 1

2

您得到的错误指出您正在使用 NSArray 而不是 NSDictionary。objectForKeyNSArray 上没有定义方法。因此,您可以做的是调试您的 Web 服务响应并检查数据类型。

关于 JSON 的输出,它应该是这样的:

NSDictionary(键:状态、错误、调试、结果、服务器)服务器是一个以NSDictionaries作为元素的NSArray 。

要获取服务器的标题:

NSDictionary *resultDict = [news objectForKey:@"result"];
NSArray *servers = [resultDict objectForKey:@"servers"];
NSDictionary *firstServer = [servers objectAtIndex:0]; // I fetch here the first server
NSString *titleOfFirstServer = [firstServer objectForKey:@"title"];
NSNumber *statusOfFirstServer = [NSNumber numberWithInt:[[firstServer objectForKey:@"status"] intValue];

要遍历所有服务器,您应该这样做:

 NSDictionary *resultDict = [news objectForKey:@"result"];
 NSArray *servers = [resultDict objectForKey:@"servers"];

 for(NSDictionary *server in servers) {
   NSString *title = [server objectForKey:@"title"];
   NSNumber *status = [NSNumber numberWithInt:[[server objectForKey:@"status"] intValue];

   NSLog(@"%@%d", title, [status intValue]);
 }
于 2013-07-31T14:34:38.907 回答