2013-08-17 60 views
0

我有一個條件斷點時indexPath.section == 3 && indexPath.row == 3。第一次觸發斷點,我跑UITableViewCell過早重用

static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

細胞是在indexPath.section == 0 && indexPath.row == 0細胞,而不是nil,這正是我所期望的相同的電池。我確保第3部分的行數是4.爲什麼不是單元格nil

+1

如果可能是同一個單元格,如果indexPath.section = 0和row = 0滾動離開屏幕。 UITableView對於回收單元格相當不錯。 –

+0

現在還不成熟,表格視圖會在合適的時候回收單元格。無論如何,你爲什麼在意?你在這裏提出一個理論問題,還是你在回收細胞時遇到了特定的問題? – rdelmar

+0

我在單元格爲'nil'時運行初始化代碼。我有12個其他行返回'nil'第一次'dequeue'被稱爲他們的'indexPath'。 –

回答

0

我只是給你的建議,如果你想給限制細胞然後按照下面我回答的可重用性,但我想MENTION在這裏,它是壞的內存管理。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    NSString *CellIdentifier = [NSString stringWithFormat:@"S%1dR%1d",indexPath.section,indexPath.row]; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if(cell == nil) 
    { 
     cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

     /// Put your code here. 
    } 

     /// Put your code here. 

    return cell; 
} 
0

UITableView不一定開始繪製第一行。它可以在任何地方開始繪製,取決於在給定時間需要繪製哪部分視圖。

dequeueReusableCellWithIdentifier:方法只會一次返回nil。之後,它將永遠返回以前用於其他行的單元格。

如果您有兩行不兼容的單元格,那麼您需要爲每個單元格標識不同的標識符。例如,也許你應該爲你的案例中的每個部分都有一個標識符。

問題是,如果您要繪製的千行表格視圖行幾乎完全相同,除非文本不同,那麼您可以創建單個單元格,然後更改文本但保留其他所有內容(字體,附件視圖等)與其經過並繪製每一個完全相同。

0

相反的[tableView dequeueReusableCellWithIdentifier:CellIdentifier];,使用

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CELL_IDENTIFIER]; 

...

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_IDENTIFIER forIndexPath:indexPath]; 

不檢查一個nil細胞。

+0

如果您正在使用Storyboard,則不需要執行此操作。 – Abizern