0

我正面临一个问题,无缘无故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_AccessNSLog(@"tableContent count ...

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

任何帮助将不胜感激。

4

2 回答 2

3

count返回一个int,因此将您的更改NSLog为:

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

你会没事的。

于 2012-05-20T00:20:25.453 回答
0

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

...
} else {
  NSPredicate* predicate = [NSPredicate predicateWithFormat:
    @"price < %d AND price > %d", _minValue, _maxValue];
  NSArray* array = [tableContent filteredArrayUsingPredicate:predicate];
  tableContent = array;
}
...
于 2012-05-20T00:40:48.850 回答