我正在使用异步连接中的json框架从Web服务加载一个tableview。数据采用json对象形式
{"id":1,"firstName":"A","lastName":"B","email":"abc@yahoo.com","salary": {"monthly":$5000,"annual":$60000}}
我正在使用cellForRowAtIndexPath中的switch语句加载tableview:
dictionaryData = [responseString JSONValue];
switch (indexPath.row)
{
case 0:
cell.textLabel.text = [NSString stringWithFormat:@"%@ : %@ %@",@"Name",[dictionaryData valueForKey:@"firstName"],[dictionaryData valueForKey:@"lastName"]];
break;
case 1:
cell.textLabel.text = [NSString stringWithFormat:@"%@ : %@",@"Email",[dictionaryData valueForKey:@"email"]];
break;
case 2:
cell.textLabel.text = [NSString stringWithFormat:@"%@ : %@",@"Monthly Salary",[[dictionaryData valueForKey:@"salary"]valueForKey:@"monthly"]];;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 3:
cell.textLabel.text = [NSString stringWithFormat:@"%@ : %@",@"Annual Salary",[[dictionaryData valueForKey:@"salary"]valueForKey:@"annual"]];
break;
default:
break;
}
这是针对普通数据的,但是当我有更多的字段,如电话号码,地址,部门号等,那么写太多的情况会使方法非常大。有人可以帮助我如何在没有切换的情况下做到这一点。
答案 0 :(得分:0)
你这是错误的方式。您希望使用indexpath.row创建数组并对其进行索引。所以你只有一行分配cell.textLabel.text。一个解决方案是: 事先创建一个包含@“Name”,@“E-Mail”等的NSArray对象,如:
NSArray *arr1=[NSArray arrayWithObjects:@"Name",@"Email",....,nil];
然后,当您获得NSDictionary时,将其存储在一个数组中并通过它进行枚举,如
NSMutableArray *arr2=[dictionaryData allValues];
for(id obj in arr2)
{
if([obj isKindOfClass:[NSString class]])
[arr2 addObject:obj];
else if([obj isKindOfClass:[NSDictionary class]])
{
[arr2 addObject:[obj valueForKey:@"Monthly"]];
[arr2 addObject:[obj valueForKey:@"Annual"]];
}
}
然后在cell.textLabel.text
中使用indexpath.rowcell.textLabel.text=[NSString stringWithFormat:@"%@ : %@",[arr1 objectAtIndex:indexPath.row],[arr2 objectAtIndex:indexPath.row]];
当然,可能有更好的方法针对您的情况,但这应该有助于您构建它。