2011-01-08 7 views
2

배열의 NSDictionary에서 정보가로드 된 테이블 뷰에 검색 막대를 삽입하려고합니다. 각 배열은 보유하고 객체입니다. 각 객체에는 이름 또는 주소와 같은 여러 속성이 있습니다.UISearchBar - NSDictionary 객체 배열 검색

NSSearchBar의 메서드를 구현했지만 배열에 문자열 만있는 다른 프로젝트에서 작동하는 자체 검색에 해당하는 코드가 작동하지 않고 문제가 발생하지 않습니다. .

코드는 다음과 같습니다. 'indiceLateral'는 알파벳이있는 배열입니다. 'partners'는 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]; 
} 

아무도 도와 줄 수 있습니까?

감사합니다,

루이 로페스

답변

5

내가 해냈어.

예 :

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