开发者

Crashing App when scrolling UItableView and hitting back

开发者 https://www.devze.com 2023-04-06 15:26 出处:网络
I am using a navigation controller to get to the UITableView. In this UItableView, there is a search bar and 50 cells. When i don\'t scroll and then hit back, the application acts normally but when i

I am using a navigation controller to get to the UITableView. In this UItableView, there is a search bar and 50 cells. When i don't scroll and then hit back, the application acts normally but when i scroll down like 10 cells and then hit back, my application crashes with EXC_BAD_ACCESS Error. Any idea wat may be the reason of this crash?

In dealloc, I am releasing all the objects I created in the header file:

- (void)dealloc
{

[listContent release];
[filteredListContent release];
[tmpCell release];
[cellNib release];

[super dealloc];
}

and for the function creating the cells, it is as follows: ( Note I am doing an alternate UItableView with a searchBar)

- (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 has the same code as dealloc


That error occurs because somewhere in your code you're setting scrollEnabled to "NO" (probably when you activate the searchbar):

self.tableView.scrollEnabled = NO;

I mean, if your searchText length is equals to 0 (you just entered on the search mode), you cannot disable the tableview scroll.

Hope this helped you.

Good luck, good coding!

Fábio Demarchi


When you press back while the tableview is being scrolled, the app will get crashed since the deallocated tableview instance's datasource(rarely delegate) protocol's method being called. So we could get the crash since we're accessing deallocated instance.

To avoid this just add the dealloc method in the particular view controller class, and set the corresponding protocol's to nil.

-(void)dealloc {

   self.yourTableView.delegate = nil;
   self.yourTableView.dataSource = nil;
}

Happy Coding :)


This is because the cells are recreated for visible rows. That is, cellForRowAtIndexPath is called for visible rows when you scroll the tableView. Remove that condition if(cell==nil) in cellForRowAtIndexPath.

0

精彩评论

暂无评论...
验证码 换一张
取 消