NSPredicate для подсчета объектов в массиве - PullRequest
0 голосов
/ 27 октября 2010

У меня есть массив, содержащий словари, и я хочу показать значения в табличном представлении в соответствии с полем «имя» в каждом словаре. Предположим, что имя начинается с «а»; тогда «b» и «c» находятся в разных разделах. Количество разделов соответствует полю словарей словарей. Как я могу получить количество строк? Если кто-нибудь знает, пожалуйста, дайте решение.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    //---get the letter in each section; e.g., A, B, C, etc.---
    NSString *alphabet = [subscribeIndexArray objectAtIndex:section];

    //---get all states beginning with the letter---

    //NSMutableArray *states =[[NSMutableArray alloc]init];
    NSArray *states;
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];

    for(NSDictionary *dict in subscribeViewArray1)
    {
       states =[[dict valueForKey:@"name"] filteredArrayUsingPredicate:predicate];
    }

    //---return the number of states beginning with the letter---
    return [states count];
}

1 Ответ

1 голос
/ 28 октября 2010

Вам необходимо иметь имена состояний в массиве, чтобы отфильтровать их с помощью предиката.

Попробуйте это:

...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];
NSMutableArray *matchingStatesArray = [[NSMutableArray alloc] init];
for (NSDictionary *dict in subscribeViewArray1) {
       //get the state names in an array
    [matchingStatesArray addObject:[dict objectForKey:@"name"]];
    }
    [matchingStatesArray filterUsingPredicate:predicate];

    return [[matchingStatesArray autorelease] count];
}
...