替换目标c中的切换语句

时间:2011-11-11 06:00:49

标签: ios4 xcode4

我正在使用异步连接中的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;
}

这是针对普通数据的,但是当我有更多的字段,如电话号码,地址,部门号等,那么写太多的情况会使方法非常大。有人可以帮助我如何在没有切换的情况下做到这一点。

1 个答案:

答案 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.row
cell.textLabel.text=[NSString stringWithFormat:@"%@ : %@",[arr1 objectAtIndex:indexPath.row],[arr2 objectAtIndex:indexPath.row]];

当然,可能有更好的方法针对您的情况,但这应该有助于您构建它。