- (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];
}
答案 0 :(得分:6)
您正在发布data
,但您没有retain
。
答案 1 :(得分:3)
你不应该这样做:
[data release]
...因为'数据'不是通过alloc,new,retain等获得的。 很可能它第二次崩溃的原因是堆被双重免费破坏了。
答案 2 :(得分:1)
在代码中,您写的是
RaceData * data = [self.units objectAtIndex:indexPath.row];
这意味着您将该特定对象的引用带入“data”对象。
但是你试图释放那个对象。
因此nil值将替换为“units”数组中的那个索引。
因此,当您第二次单击时,您将从nil对象访问属性(如titler,min等...)。但它没有那些。所以它崩溃了。
删除[数据发布];声明,然后它将被解决。
此致
萨蒂亚
答案 3 :(得分:0)
您不应该发布来自[self.units objectAtIndex:indexPath.row]的数据; 而且,我认为你应该阅读the apple's memory management guide.