Цикл по массиву словарей в cellForRowAtIndexPath - PullRequest
0 голосов
/ 15 сентября 2011

У меня есть массив словарей. Каждый словарь имеет одну категорию. Я хочу заполнить табличное представление всеми словарями с одной общей категорией, которая была выбрана в предыдущем табличном просмотре.

NSDictionary *name = [sortedNames objectAtIndex:indexPath.row];
NSMutableString *currentCat = [name objectForKey:@"category"];

if ([currentCat isEqualToString:catSelected]) {
    cell.textLabel.text = [name objectForKey:@"title"];
}

Как вы уже догадались, если первые два словаря в массиве не выбранного типа категории, а третий - заполнение ячейки третий дюйм

Как мне правильно подойти к этому?

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Вы можете создать NSMutableArray при загрузке контроллера вида.Этот массив будет содержать только те объекты, которые вы хотите отобразить в этом табличном представлении.

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.namesArray = [NSMutableArray array];
    for (NSDictionary *dict in sortedNames) {
        if ([(NSString *)[dict objectForKey:@"category"] isEqualToString:catSelected]) {
            [newArray addObject:dict];
        }
    }
}


Затем в вашем tableView:cellForRowAtIndexPath: вы назначаете на основе индекса:

if (indexPath.row < [namesArray count]) {    // Just incase...
    cell.textLabel.text = [namesArray objectAtIndex:indexPath.row];
}

Ключевой идеей здесь является то, что мы не выводим данные, которые нам не нужны, для представления таблицы.

1 голос
/ 15 сентября 2011

взять изменяемый массив в файле .h В viewWillAppear init и добавить объекты для этого массива, используя ваш код, например

  array = [[NSMutableArray alloc] init];
for(int i = 0;i<[sortedNames count];i++)
{
    NSDictionary *name = [sortedNames objectAtIndex:i];
    NSMutableString *currentCat = [name objectForKey:@"category"];

    if ([currentCat isEqualToString:catSelected]) {
        [array addObject:[name objectForKey:@"title"]];
    }
}

В методе numberOfRowsInSection укажите

[array count];

В методе cellForRowAtIndexPath

cell.textLabel.text =[array objectAtIndex:indexPath.row];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...