在 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 响应数据