UISearchBar - поиск NSDictionary массивов объектов - PullRequest
2 голосов
/ 08 января 2011

Я пытаюсь вставить строку поиска в табличное представление, которое загружено информацией из NSDictionary of Arrays. Каждый массив содержит и объект. Каждый объект имеет несколько свойств, таких как Имя или Адрес.

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

Вот код: indiceLateral - массив с алфавитом; «партнеры» - это NSDictionary; «RLPartnersClass» - это мой класс партнеров, каждый со своими свойствами (имя, адрес, ...).

-(void)handleSearchForTerm:(NSString *)searchTerm {

 NSMutableArray *sectionsToRemove = [[NSMutableArray alloc] init];
 [self resetSearch];

 for (NSString *key in self.indiceLateral) {
  NSMutableArray *array = [partners valueForKey:key];
  NSMutableArray *toRemove = [[NSMutableArray alloc] init];

  for (NSString *name in array) {
   if ([name rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location == NSNotFound)
    [toRemove addObject:name];
  }

  if ([array count] == [toRemove count])
   [sectionsToRemove addObject:key];
  [array removeObjectsInArray:toRemove];
  [toRemove release];
 }

 [self.indiceLateral removeObjectsInArray:sectionsToRemove];

 [sectionsToRemove release];
 [theTable reloadData];
}

Может кто-нибудь помочь мне, пожалуйста?

Спасибо

Руи Лопес

1 Ответ

5 голосов
/ 09 января 2011

Я сделал это.

Пример:

-(void)handleSearchForTerm:(NSString *)searchTerm {

    NSMutableDictionary *finalDict = [NSMutableDictionary new];
    NSString *currentLetter = [[NSString alloc] init];

    for (int i=0; i<[indiceLateral count]; i++) {
        NSMutableArray *elementsToDict = [[[NSMutableArray alloc] init] autorelease];
        currentLetter = [indiceLateral objectAtIndex:i];

        NSArray *partnersForKey = [[NSArray alloc] initWithArray:[partnersCopy objectForKey:[indiceLateral objectAtIndex:i]]];

        for (int j=0; j<[partnersForKey count]; j++) {
            RLNames *partnerInKey = [partnersForKey objectAtIndex:j];

            NSRange titleResultsRange = [partnerInKey.clientName rangeOfString:searchTerm options:NSDiacriticInsensitiveSearch | NSCaseInsensitiveSearch];

            if (titleResultsRange.length > 0){
                NSLog(@"found: %@", partnerInKey.clienteCity
                [elementsToDict addObject:partnerInKey];
            }
        }

        [finalDict setValue:elementsToDict forKey:currentLetter];
    }

    NSMutableDictionary *finalResultDict = [finalDict mutableDeepCopy];
    self.partners = finalResultDict;
    [finalResultDict release];

    [theTable reloadData];
}
...