заменить для переключения заявления в цель с - PullRequest
0 голосов
/ 11 ноября 2011

Я загружаю табличное представление с содержимым из веб-сервиса, используя фреймворки json в асинхронном соединении.Данные в виде объекта json

 {"id":1,"firstName":"A","lastName":"B","email":"abc@yahoo.com","salary":    {"monthly":$5000,"annual":$60000}}

Я загружаю просмотр таблицы с помощью оператора switch в cellForRowAtIndexPath:

 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 голосов
/ 11 ноября 2011

Вы идете об этом неправильно. Вы хотите создать массивы и проиндексировать их, используя indexpath.row. Таким образом, у вас будет только одна строка назначения cell.textLabel.text. Одним из решений является: Создайте NSArray объектов, предварительно содержащих ваши @ "Name", @ "E-Mail" и т. Д., Например:

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]];

Конечно, может быть лучший способ, специфичный для вашего случая, но это должно помочь вам построить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...