2011-06-20 148 views
0

任何人都有任何想法,为什么这个表视图代码崩溃?UITableView崩溃

这一点,在我的viewDidLoad

itemArray = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", nil]; 

然后,这在我的cellForRowAtIndexPath方法:

cell.textLabel.text = [NSString stringWithFormat:@"Item (%@)", [itemArray objectAtIndex:indexPath.row]]; 

当我向下滚动(即,使得物体1熄灭屏幕),然后滚动回尝试看对象1,它在前一行崩溃。

,如果我有这样的替换问题的行没关系:

cell.textLabel.text = @"test"; 

UPDATE:答案是,阵列没有被保留。 该行固定的问题:

itemArray = [[NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", nil] retain]; 

OR

itemArray = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", nil]; 
+1

什么是崩溃日志? – PengOne

+0

没有看到更多的代码,这是不可能的,但是你的数组的大小不同于表中的行数? – Moshe

+0

事实上,它最初是好的,但是当你关闭一个单元格并在屏幕上滚动时会崩溃,这表明可能存在ReuseIdenitifiers问题。 – PengOne

回答

3

你itemArray似乎并没有被保留。 arrayWithObjects:返回一个自动释放对象。你需要retaincopy它,或者使用保留属性的语法糖。

+0

或者,如果它被声明并具有'property(nonatomic,retain)'并且是'synthesize'd,那么''self setItemArray:...]'而不是。 – PengOne

+0

@Eiko如果它会保留问题,它会马上粉碎第一个'-objectAtIndex:'在'-cellForRowAtIndexPath:' – bioffe

+0

@bioffe中调用。不,不一定。当表格第一次请求单元格时,该视图可能会加载,因此autorelease池仍然可以在周围。 – Eiko