NSMutableArray超出界限错误

时间:2013-01-23 04:33:54

标签: ios nsmutablearray

我有一个方法的一部分给了我一个错误。 这是一个文字过滤器,用户输入a,所有单词出现等...

当用户删除搜索栏文本并点击表格上的内容时出现错误,我就会超出界限范围。

filterListContent的打印输出是单个“”条目,我应该通过保持“”不会导致程序崩溃来实现什么?

由于

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    if ([_filteredListContent count]>0){
        NSLog(@"%i",indexPath.row);
        NSLog(@"%@",_filteredListContent);
        _searchBar.text=[self.filteredListContent objectAtIndex:indexPath.row];
        //Save to user default

3 个答案:

答案 0 :(得分:2)

我不确定是什么原因引起了您的问题但是根据给定的代码看起来所选的行是"超出界限"。我会改变我的支票:

[_filteredListContent count] > 0

类似于:

[_filteredListContent count] > indexPath.row

这只是基于给出的代码。

答案 1 :(得分:1)

我猜您正在使用搜索显示控制器在表格中搜索。但与此同时,您对两个表使用相同的数组引用(self.filteredListContent)(一个是搜索结果表,另一个是用于显示所有单词的原始表)。在搜索栏中键入字符时,您正在修改self.filteredListContent数组。这就是为什么当你搜索self.filteredListContent被修改的东西(可能包含的对象少于用于加载原始表的对象)然后你选择原始表的任何行,如果你试图访问数组中不存在的索引对象,它将崩溃

所以我建议你保留两个数组。一个用于装载原始桌子和一个用于搜索结果表

答案 2 :(得分:-1)

以下是文字过滤器的简单示例。

-(void)viewDidLoad
{
    self.listOfTemArray = [[NSMutableArray alloc] init];
    self.ItemOfMainArray = [[NSMutableArray alloc] initWithObject:@"/ArrayList/"];

    [self.listOfTemArray addObjectsFromArray:self.ItemOfMainArray];
}


#pragma mark -
#pragma mark Table view Methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView {
    // Return the number of sections.
    return 1;
}
- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [self.listOfTemArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Foobar"];
    if (cell == nil) 
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Foobar"];

        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
        cell.textLabel.textColor = [UIColor blackColor];
    }

        cell.textLabel.text = [self.listOfTemArray objectAtIndex: indexPath.row];

    return cell;
}

#pragma mark -
#pragma mark SearchBar methods

- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText
{
        NSString *name = @"";
        NSString *firstLetter = @"";

    if (self.listOfTemArray.count > 0)
         [self.listOfTemArray removeAllObjects];

        if ([searchText length] > 0)
        {
                for (int i = 0; i < [self.ItemOfMainArray count] ; i = i+1)
                {
                        name = [self.ItemOfMainArray objectAtIndex:i];

                        if (name.length >= searchText.length)
                        {
                                firstLetter = [name substringWithRange:NSMakeRange(0, [searchText length])];
                                //NSLog(@"%@",firstLetter);

                                if( [firstLetter caseInsensitiveCompare:searchText] == NSOrderedSame )
                                {
                                    // strings are equal except for possibly case
                                    [self.listOfTemArray addObject: [self.ItemOfMainArray objectAtIndex:i]];
                                    NSLog(@"=========> %@",self.listOfTemArray);
                                }
                         }
                 }
         }
         else
         {
             [self.listOfTemArray addObjectsFromArray:self.ItemOfMainArray ];
         }

        [self.tblView reloadData];
}

此代码可能对您的情况有用......

感谢:)