NSMutableArray removeAllObjects问题

时间:2012-05-20 00:15:38

标签: objective-c uitableview ios5 nsmutablearray xcode4.2

我遇到NSMutableArray的问题,无法给我Exc_Bad_Access

我有一个UITableView包含大约700条记录,我想激活一个过滤进程,我正在使用以下方法来过滤UITableView的内容:

- (void) filterTableContentWith:(int)_minValue andWith:(int)_maxValue {

       [tableContent removeAllObjects];
       tableContent = [[NSMutableArray alloc] initWithArray:originalTableContent copyItems:YES];

       if (_minValue == 0 && _maxValue == 0) {
            NSLog(@"This is mean that no filter is activate here");
       } else {
            for (int x = ([tableContent count] - 1); x >= 0; x--) {
                 if ([[[tableContent objectAtIndex:x] objectForKey:@"price"] intValue] < _minValue && [[[tableContent objectAtIndex:x] objectForKey:@"price"] intValue] > _maxValue) {
                       [tableContent removeObjectAtIndex:x];
                 }
            }
       }
       NSLog(@"tableContent count = %@",[tableContent count]);
       [self.tableView reloadData];
}

当我调用此方法时,它会在Exc_Bad_Access

上显示NSLog(@"tableContent count ...

我认为[tableContent removeAllObjects];正在释放数组,但这是不合理的。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

count会返回int,因此请将NSLog更改为:

NSLog(@"tableContent count = %d",[tableContent count]);

你会没事的。

答案 1 :(得分:0)

除了使用%d更改NSLog的计数外,我认为以下代码优于删除循环中的内容:

...
} else {
  NSPredicate* predicate = [NSPredicate predicateWithFormat:
    @"price < %d AND price > %d", _minValue, _maxValue];
  NSArray* array = [tableContent filteredArrayUsingPredicate:predicate];
  tableContent = array;
}
...