2010-08-11 4 views
0

У меня другая проблема с UITableView, приложение падает после перезагрузки tableView после загрузки данных из Интернета, авария происходит в отмеченном месте в cellForRowAtIndexPath methood. I thinnk Я все еще не совсем понимаю, что на самом деле означает рециркуляцию клеток. Спасибо за любую помощьEXEC_BAD_ACCESS с cellForRowAtIndexPath, опять

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 

UILabel *venueName; 
UIImageView *logo; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) 
{ 
    NSLog(@">>> GIT 1<<<"); 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 

    venueName = [[UILabel alloc] initWithFrame:CGRectZero]; 
    [venueName setLineBreakMode:UILineBreakModeWordWrap]; 
    [venueName setMinimumFontSize:FONT_SIZE]; 
    [venueName setNumberOfLines:0]; 
    [venueName setFont:[UIFont systemFontOfSize:FONT_SIZE]]; 
    [venueName setTag:1]; 
    venueName.backgroundColor = [UIColor clearColor]; 
    [[cell contentView] addSubview:venueName]; 

    logo = [[UIImageView alloc] initWithFrame:CGRectZero]; 
    [logo setTag:10]; 
    [[cell contentView] addSubview:logo]; 

    cell.backgroundView = [[[UIImageView alloc] init] autorelease];//new 
} 

NSMutableDictionary *oneVenue ; 

if ([self.venueList count] > 0) { 

    oneVenue = [self.venueList objectAtIndex:indexPath.row]; 

    if (!venueName) { 
    venueName = (UILabel*)[cell viewWithTag:1]; 
    } 
    [venueName setText:[oneVenue objectForKey:@"Name"]]; // <===CRASH!!! 
    [venueName setFrame:CGRectMake(CELL_CONTENT_MARGIN,CELL_VENUE_LEVEL ,80 , 30)]; 

    [logo setImage:[UIImage imageNamed:@"event.png"]]; 
    [logo setFrame:CGRectMake(10, 5, 76, 60)]; 

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

    UIImage *rowBackground; 

    rowBackground = [UIImage imageNamed:@"evbgd_yell.png"]; 

    ((UIImageView *)cell.backgroundView).image = rowBackground; 
} 

return cell; 
} 
+0

p.s. может кто-нибудь сказать, как поставить код, чтобы он выглядел как код? – Mapedd

+0

Это кнопка 010101. – mvds

ответ

0

я догадку, что ваш self.venueList содержит указатели, которые являются недопустимыми, и так падает, когда разыменовываются на линии вы отметили.

+0

placeList в порядке, я проверил его перечислением – Mapedd

0
  1. Вы пробовали сборку и анализ? Иногда это может помочь в таких вещах.
  2. Попробуйте инициализировать venueName, когда вы его объявите. Временные переменные в C не инициализируются по умолчанию, поэтому ваш if (!venueName) может быть обойден, если вы этого не хотите.
2

похоже, что вы используете eventName, не инициализируя его в ситуациях, когда вы повторно используете ячейку.

У вас есть:

UILabel *venueName; 

, а затем позже:

[venueName setText:[oneVenue objectForKey:@"Name"]]; // <===CRASH!!! 

в ситуациях, когда вы выделяете ячейку вы устанавливаете venueName но когда повторно клетка не бывает. Чтобы исправить это, вам просто нужно:

UILabel *venueName = nil; 
+0

Ключ в том, что проверка if (! VenueName) не будет работать, потому что это неэнилированное значение, отличное от нуля. –

Смежные вопросы