2011-01-08 12 views
2

Ich versuche eine Suchleiste in eine Tabellenansicht einzufügen, die mit Informationen aus einem NSDictionary von Arrays geladen wird. Jedes Array hält und Objekt. Jedes Objekt verfügt über mehrere Eigenschaften, z. B. Name oder Adresse.UISearchBar - suche ein NSDictionary von Arrays von Objekten

Ich habe die Methoden von NSSearchBar implementiert, aber der Code für die Suche selbst, dass ich an einem anderen Projekt arbeiten, wo die Arrays nur Zeichenfolgen haben, funktioniert nicht, und ich kann nicht zu th Problem bekommen .

Hier ist der Code: 'indiceLateral' ist ein Array mit dem Alphabet; "Partner" ist ein NSDictionary; 'RLPartnersClass' ist meine Klasse von Partnern, jeder mit den Eigenschaften (Name, Adresse, ...).

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

Kann mir bitte jemand helfen?

Danke,

Rui Lopes

Antwort

5

Ich habe es getan.

Beispiel:

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