2011-11-11 45 views
0

我使用异步连接中的json框架从web服务的内容加载tableview。该数据是JSON对象形式替换目标c中的switch语句

{"id":1,"firstName":"A","lastName":"B","email":"[email protected]","salary": {"monthly":$5000,"annual":$60000}} 

我在的cellForRowAtIndexPath使用switch语句加载实现代码如下:

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

你正在走错这条路。你想创建数组并使用indexpath.row为它们编制索引。所以你只有一行分配cell.textLabel.text。一个解决方案是: 事先创建包含你@“名称”对象的一个​​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"]]; 
    } 
} 

然后,只需使用indexpath.row在cell.textLabel.text

cell.textLabel.text=[NSString stringWithFormat:@"%@ : %@",[arr1 objectAtIndex:indexPath.row],[arr2 objectAtIndex:indexPath.row]]; 

当然也有可能是具体到你的情况有更好的方式,但这应该帮助你建立这个。