0

UITableView에 검색 창을 추가하려고합니다. 나는이 튜토리얼을 따라 갔다 : http://clingingtoideas.blogspot.com/2010/02/uitableview-how-to-part-2-search.html.UITableView 및 SearchBar 문제

검색 상자에 문자를 입력하면이 오류가 표시됩니다 : Rooster(10787,0xa05ed4e0) malloc: *** error for object 0x3b5f160: double free *** set a breakpoint in malloc_error_break to debug.

이 오류

여기서 발생

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { 
    [self handleSearchForTerm:searchString]; 

    return YES; 
} 

을 (두 번째 줄에)

- (void)handleSearchForTerm:(NSString *)searchTerm { 
    [self setSavedSearchTerm:searchTerm]; 

    if ([self searchResults] == nil) { 
     NSMutableArray *array = [[NSMutableArray alloc] init]; 
     [self setSearchResults:array]; 
     [array release]; 
    } 

    //Empty the searchResults array 
    [[self searchResults] removeAllObjects]; 

    //Check if the searchTerm doesn't equal zero... 
    if ([[self savedSearchTerm] length] != 0) { 
     //Search the whole tableList (datasource) 
     for (NSString *currentString in tableList) { 
      NSString *klasString = [[NSString alloc] init]; 
      NSInteger i = [[leerlingNaarKlasList objectAtIndex:[tableList indexOfObject:currentString]] integerValue]; 
      if(i != -1) { 
       klasString = [klassenList objectAtIndex:(i - 1)]; 
      } 

      //Check if the string matched or the klas (group of school) 
      if ([currentString rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location != NSNotFound || 
       [klasString rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location != NSNotFound) { 
       //Add to results 
       [[self searchResults] addObject:currentString]; 

       //Save the klas (group of school). It has the same index as the result (lastname) 
       NSString *strI = [[NSString alloc] initWithFormat:@"%i", i]; 
       [[self searchResultsLeerlingNaarKlas] addObject:strI]; 
       [strI release]; 
      } 

      [klasString release]; 
     } 
    } 
} 

누군가가 나를 도울 수 있습니까?

감사합니다, 도도

답변

2

이중 무료 오류가 더 필요한 것보다 객체를 발표 한 것을 의미한다. 여기서 수상한 객체는 klasString입니다. 코드에서 :

NSString *klasString = [[NSString alloc] init]; 
... 
if(i != -1) { 
    klasString = [klassenList objectAtIndex:(i - 1)]; 
} 
... 
[klasString release]; 

새로 할당있는 NSString에 문

  1. 잃는 경우 참조 내부의 할당 메모리를 도입는
  2. 는 이후 릴리스가 klassenList에서 개체에 적용 할 수 있습니다 누출. klassenList가 요소를 해제하면 double free 오류가 발생합니다.
+0

감사합니다. if 문 안에 retain을 추가했습니다! – dododedodonl