2010-08-11 52 views
0

我有另一個UITableView的問題,應用程序崩潰後重新加載tableView後從互聯網加載數據,崩潰發生在cellForRowAtIndexPath方法顯式地方。 我的thin i我仍然不完全明白究竟是什麼意思回收細胞。 感謝您的幫助EXEC_BAD_ACCESS with 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 2010-08-11 20:36:49

+0

這是010101按鈕。 – mvds 2010-08-11 20:39:57

回答

0

我大膽猜測,你self.venueList包含無效指針,你標記的代碼行提領時如此崩潰。

+0

venueList的確定,好吧,我已通過枚舉檢查它 – Mapedd 2010-08-12 10:38:21

0
  1. 您是否嘗試過構建和分析?它有時可以幫助這樣的事情。
  2. 嘗試初始化venueName在您聲明時爲零。 C中的臨時變量在默認情況下不會被初始化,因此當您不希望它變爲時,您的if (!venueName)可能會被繞過。
2

看起來像你正在使用的場地名稱沒有初始化它在你重用單元格的情況下。

您有:

UILabel *venueName; 

再後來:

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

在你分配你設置venueName細胞,但當細胞被重用它不發生的情況。要解決您應該只需要:

UILabel *venueName = nil; 
+0

關鍵是檢查if(!venueName)將無法正常工作,因爲它是一個未初始化的值非零。 – 2010-08-11 22:11:27