在 UITableView 中显示 JSON 数据

Posted

技术标签:

【中文标题】在 UITableView 中显示 JSON 数据【英文标题】:Display JSON data in UITableView 【发布时间】:2012-05-21 00:36:57 【问题描述】:

我的应用正在加载一些 JSON 格式的数据,一切正常,但是当我尝试在 UITableView 单元格中显示这些数据时,什么也没有发生。我的代码如下:

获取数据(JSON):

-(void)fetchedData:(NSData *)responseData 

    NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    NSArray* latestLoans = [json objectForKey:@"loans"];

    testeDictionary = [latestLoans objectAtIndex:0];

    testeLabel.text = [NSString stringWithFormat:@"%@",[testeDictionary objectForKey:@"id"]];

    testeString = [testeDictionary objectForKey:@"username"];
    [miArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:testeString,@"username",nil]];



UITableView:

-(UITableViewCell *)tableView:(UITableView *)myTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


    UITableViewCell *cell = (UITableViewCell *)[self.settingsTableView dequeueReusableCellWithIdentifier:@"CellD"];
    if (cell == nil) 
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CellD" owner:self options:nil];
        cell = (UITableViewCell *)[nib objectAtIndex:0];
    


    if ([indexPath row] == 0) 

        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CellA" owner:self options:nil];
        cell = (UITableViewCell *)[nib objectAtIndex:0];


        NSDictionary *itemAtIndex = (NSDictionary *)[miArray objectAtIndex:indexPath.row];


        UILabel *usernameString = (UILabel *)[cell viewWithTag:1];
        usernameString.text = [itemAtIndex objectForKey:@"id"]; <== MUST DISPLAY JSON VALUE


    

    return cell;


更清楚我需要在usernameString.text 上显示这个[testeDictionary objectForKey:@"id"]

【问题讨论】:

快速调试:您在 itemAtIndex 中有数据吗,b。 usernameString 是否包含任何内容,它实际上是 UILabel,c。 [itemAtIndex objectForKey:@"id"] 是否返回字符串? 只要看一下代码就知道了。usernameString 是一个以编程方式创建的 UILabl,objectForKey:@"id" 是我从 JSON 数据中检索到的值之一。关于 itemAtIndex,不,我不知道,每次我尝试使用它时都会得到一个空值! 简单地将某些内容投射到 UILabel 并不会使其成为标签。 [cell viewWithTag:1] 可能返回 nil。但是如果你说 [itemAtIndex objectForKey:@"id"] 返回一个空值,那么你的字典没有名为“id”的键。它可以隐藏在子结构中吗?你试过 NSLog 来检查字典键吗? 【参考方案1】:

你没有存储 id

[miArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:testeString,@"username",nil]];

我想你想做的是这样的

NSString *idString = [NSString stringWithFormat:@"%@", [testeDictionary objectForKey:@"id"]];
[miArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                                          testeString, @"username",
                                          idString, @"id", 
                                          nil]];

编辑(解释)

在您的方法 fetchedData: 中,您提取 id 并将某些标签的文本设置为 id。

testeLabel.text = [NSString stringWithFormat:@"%@",[testeDictionary objectForKey:@"id"]];

之后,您就忘记了 id。然后,您继续提取用户名并创建一个包含用户名的字典,并将该字典添加到名为 miArray 的数组中。

[miArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:testeString,@"username",nil]];

请注意,您没有指定任何名为“id”的键。

稍后,您从miArray 获取字典。这个字典是你用一个键创建的,即“用户名”。您告诉它获取键“id”的对象,但由于您从未指定该键,因此您将获得 nil 值。

底线,试试我的解决方案。

【讨论】:

你在我的代码 Paul 中做了同样的事情!我需要我以编程方式创建的 UILabel(查看代码的第二部分,UILabel 称为 usernameString)来显示数据我从 JSON 中获取(在代码的第一部分中,您可以看到 testeLabel.text = [NSString stringWithFormat:@"%@",[testeDictionary objectForKey:@"id"]]; |这部分返回给我一个value == > 我需要在我的 usernameString.text 上显示这些值) 我绝对不会和你做同样的事情。请查看我编辑的答案。

以上是关于在 UITableView 中显示 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITableView 中显示 JSON 数据

在 UITableView 中显示来自 JSON 的数据

在分段的 UITableView 中显示 JSON 响应数据

JSON 解析:在 UITableView 上显示数据

如何在 UITableview 单元格中正确显示 JSON 数据?

显示 JSON 数据的 UITableView 中的响应滞后