2010-12-02 119 views
0

嘿家伙, 我是Objective-C的新手,我正在创建一个应用程序,当你点击一个表格单元格时,它会做它应该做的事情,但是当你回去点击单元格时,第二个时间,它与“EXC_BAD_ACCESS”坠毁。你能告诉我这是什么意思,为什么它只是第二次崩溃,我该如何解决?我敢肯定它在这个函数:为什么第二次崩溃?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
// Navigation logic may go here. Create and push another view controller. 

    RaceData * data = [self.units objectAtIndex:indexPath.row]; 
    ProtossInfo * info = [[ProtossInfo alloc] initWithNibName:@"ProtossInfo" bundle:nil]; 

    // ... 
    // Pass the selected object to the new view controller. 
    [self.navigationController pushViewController:info animated:YES]; 

    info.title = data.titler; 
    info.minerals.text = data.min; 
    info.vespene.text = data.vesp; 
    info.supply.text = data.sup; 
    info.portrait.image = data.porty; 

    [info release]; 
    [data release]; 

} 

回答

6

你释放data,你没有retain

+0

哈哈哈。谢谢。有效。 – Nathan 2010-12-02 05:38:58

3

你不应该做的:

[data release] 

...因为“数据”通过页头并没有得到新的,保留等 最有可能的原因,周围坠毁第二次是由双免费损坏的堆。

1

在这里,在该代码中,您已经写像

RaceData *数据= [self.units objectAtIndex:indexPath.row];

这意味着您正在将该特定对象引用到“数据”对象中。

但您试图释放该对象。

所以零值将被替换为那个“units”数组中的索引。

所以,当你第二次点击你从nil对象访问的属性(如titler,min等...)。但它没有这些。所以它崩溃了。

删除[data release];声明,那么它将被解决。

问候,

萨蒂亚

相关问题