我遇到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];
正在释放数组,但这是不合理的。
任何帮助将不胜感激。
答案 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;
}
...