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

Может кто-нибудь помочь мне?

С уважением, Dodo

ответ

2

двойной бесплатно ошибка означает, что вы выпустили объект больше, чем нужно. Здесь подозрительным объектом является klasString. Из кода:

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

Назначение внутри, если оператор

  1. теряет ссылку на вновь выделенный NSString, вводя память утечки
  2. делает позже релиз применить к объекту от klassenList. Когда klassenList освобождает свои элементы, произойдет двойная свободная ошибка.
+0

Спасибо! Внутри оператора if я добавил сохранение! – dododedodonl

Смежные вопросы