2011-06-20 176 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