代码之家  ›  专栏  ›  技术社区  ›  gabaum10

iPad搜索栏内存访问错误?

  •  0
  • gabaum10  · 技术社区  · 14 年前

    所以我正在尝试在我的应用程序中实现一个搜索栏,并且非常接近,但似乎无法确定内存错误发生在哪里。这就是我搜索方法的一部分:

    filters = [[NSMutableArray alloc] init];
    NSString *searchText = detailSearch.text;
    NSMutableArray *searchArray = [[NSMutableArray alloc] init];
    
    // Normally holds the object (ex: 70 locations)
    searchArray = self.copyOfFilters ;
    
    //This is the line that is breaking after ~2-3 letters are entered in the search
    for (NSString *sTemp in searchArray)
    {
        NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
    
        if (titleResultsRange.length > 0)
            [filters addObject:sTemp];
    }
    displayedFilters = filters;
    

    CopyOfFilters是当视图首次通过以下方式加载时显示的筛选器的深度副本:

    self.copyOfFilters = [[NSMutableArray alloc] initWithArray:displayedFilters copyItems:YES];    
    

    我已经追踪到了字母的输入,它在2个字母之后是准确的,但是一旦你尝试在搜索栏的一个空格后输入一个字母,它就会崩溃。copyOffilters=(int)[$var count]对象的值。有人知道这可能是什么原因吗?谢谢!

    3 回复  |  直到 14 年前
        1
  •  0
  •   VdesmedT    14 年前
    NSMutableArray *searchArray = [[NSMutableArray alloc] init];
    
    // Normally holds the object (ex: 70 locations)
    searchArray = self.copyOfFilters ;
    

    是一个非常基本的内存泄漏。您创建了一个nsmuatbleArray,并释放了任何使用下一个语句释放它的机会。

    请确保不要在代码中的任何位置释放或更改copyoffilters或searcharray。

        2
  •  0
  •   boreas    14 年前

    在调用DisplayedFilters时是否释放了筛选器?

        3
  •  0
  •   Alexej Kubarev    14 年前

    当self.copyoffilters被修改时,我想知道您是否有问题。 尝试

    searchArray = [self.copyOfFilters copy] ;
    

    不要忘记在循环后释放searcharray。 这可能是黑暗中的一枪,但值得一枪吗?