UISearchBar - busque un NSDictionary de matrices de objetos

Estoy tratando de insertar una barra de búsqueda en una vista de tabla, que está cargada con información de un NSDictionary of Arrays. Cada matriz contiene un objeto. Cada objeto tiene varias propiedades, como Nombre o Dirección.

Implementé los métodos de NSSearchBar, pero el código correspondiente a la búsqueda en sí mismo, que tengo trabajando en otro proyecto donde las matrices solo tienen cadenas, no funciona y no puedo resolver el problema.

Aquí está el código: 'indiceLateral' es una matriz con el alfabeto; 'socios' es un NSDictionary; 'RLPartnersClass' es mi clase de Socios, cada uno con las propiedades (nombre, dirección, ...).

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

¿Alguien puede ayudarme por favor?

Gracias,

Rui Lopes

preguntado el 08 de enero de 11 a las 18:01

1 Respuestas

Lo he hecho.

Ejemplo:

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

Respondido 13 Feb 17, 11:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.