【问题标题】:UITableView and SearchBar problemUITableView 和 SearchBar 问题
【发布时间】:2010-05-01 14:22:46
【问题描述】:

我正在尝试向我的 UITableView 添加一个搜索栏。我按照本教程进行操作:http://clingingtoideas.blogspot.com/2010/02/uitableview-how-to-part-2-search.html

如果我在搜索框中输入一个字母,我会收到此错误: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];
        }
    }
}

谁能帮帮我?

问候, 渡渡鸟

【问题讨论】:

    标签: cocoa-touch uitableview iphone-sdk-3.0 uisearchbar uisearchdisplaycontroller


    【解决方案1】:

    双重释放错误意味着您释放的对象超出了需要。这里的可疑对象是 klasString。 从您的代码:

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

    if 语句中的赋值

    1. 失去对新分配的 NSString 的引用,导致内存泄漏
    2. 使更高版本适用于 klassenList 中的对象。当 klassenList 释放其元素时,会出现双重释放错误。

    【讨论】:

    • 谢谢!!在 if 语句中,我添加了一个 retain!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多