我正在使用导航控制器来访问UITableView。在这个UItableView中,有一个搜索栏和50个单元格。当我不滚动然后回击时,应用程序正常运行但当我向下滚动10个单元格然后回击时,我的应用程序崩溃与EXC_BAD_ACCESS错误。任何想法可能是这次崩溃的原因?
在dealloc中,我将释放我在头文件中创建的所有对象:
- (void)dealloc
{
[listContent release];
[filteredListContent release];
[tmpCell release];
[cellNib release];
[super dealloc];
}
并且对于创建单元格的函数,它如下:(注意我正在使用searchBar执行备用UItableView)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *kCellID = @"cellID";
ApplicationCell *cell = (ApplicationCell *)[tableView dequeueReusableCellWithIdentifier:kCellID];
if (cell == nil)
{
[self.cellNib instantiateWithOwner:self options:nil];
cell = tmpCell;
self.tmpCell = nil;
}
/*
If the requesting table view is the search display controller's table view, configure the cell using the filtered content, otherwise use the main list.
*/
NSDictionary *dataItem;
if (tableView == self.searchDisplayController.searchResultsTableView)
{
dataItem = [self.filteredListContent objectAtIndex:indexPath.row];
}
else
{
dataItem = [self.listContent objectAtIndex:indexPath.row];
}
// Display dark and light background in alternate rows -- see tableView:willDisplayCell:forRowAtIndexPath:.
cell.useDarkBackground = (indexPath.row % 2 == 0);
// Configure the data for the cell.
cell.icon = [UIImage imageNamed:@"iTaxi.jpeg"];
cell.publisher = [dataItem objectForKey:@"Number"];
cell.name = [dataItem objectForKey:@"Name"];
cell.price = [UIImage imageNamed:@"order-taxi.png"];
return cell;
}
ViewDidUnload与dealloc
具有相同的代码答案 0 :(得分:0)
这是因为为可见行重新创建了单元格。也就是说,当您滚动tableView时,将为可见行调用cellForRowAtIndexPath。删除cellForRowAtIndexPath中的条件if(cell==nil)
。你能分享你的代码吗?
答案 1 :(得分:0)
发生该错误是因为您的代码中某处将scrollEnabled设置为“NO”(可能是在您激活搜索栏时):
self.tableView.scrollEnabled = NO;
我的意思是,如果您的searchText length
等于0
(您刚刚进入搜索模式),则无法禁用该表视图滚动。
希望这有助于你。
祝你好运,编码好!
FábioDemarchi
答案 2 :(得分:0)
当您在滚动表视图时按下后,应用程序将崩溃,因为调用了已释放的tableview实例的数据源(很少委托)协议的方法。因此我们可以获得崩溃,因为我们正在访问已解除分配的实例。
为避免这种情况,只需在特定的视图控制器类中添加 dealloc 方法,并将相应的协议设置为nil。
-(void)dealloc {
self.yourTableView.delegate = nil;
self.yourTableView.dataSource = nil;
}
快乐编码:)