2012-08-03 82 views
3

在经典模式下,从dequeueReusableCellWithIdentifier返回的cell始终为非nil。为什么?我们不应该先分配一些单元,那么我们可以重新使用一些单元?dequeueReusableCellWithIdentifier总是返回非零?

我正在使用自定义单元格,并且它是在故事板中创建的。 (但是,如果我使用了默认的UITableViewCell,现象是一样的 - 返回的单元格始终是non-nil)。

环境:Xcode中4.3.3的iOS 5.1

AlbumListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AlbumCell"]; 

//cell always non nil --- why?? 
if(cell == nil){ 
    cell = [[AlbumListCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"AlbumCell"]; 

} 

回答

6

如果您正在使用故事板并将UITableViewCell的标识符设置为您在dequeueReusableCellWithIdentifier中使用的标识符(在您的案例中为“AlbumCell”),在故事板文件中,UITableView将始终为您创建单元格。我想这是故事板的一个功能。如果在故事板中找不到标识符,则需要手动创建单元格。

+0

+1事实证明这是事实。但是IB将使用哪个构造函数来创建这些单元格?没有调用AlbumListCell的'initWithStyle:reuseIdentifier'。 – pierrotlefou 2012-08-03 02:30:43

+0

- (id)initWithCoder:(NSCoder *)aDecoder将被调用。 aDecoder是UINibDecoder。然后所有信息将从界面文件中检索。 – 2012-08-03 02:53:00

0

我知道这是可能的小区的回报是零,你应该检查它。通常情况并非如此,因为您应该根据您提供的标识符为您创建一个单元格。如果你没有正确的标识符和池是空的,我相信你会得到零的情况,你可以做一个aloc init来创建一个新的单元格。另外我应该添加在xcode中创建的原型单元格是创建单元格的原因,这就是为什么它应该以非零开始并且不必创建单元格。

为了更好地回答这个问题,请转到iTunes并转到课程iPad和iPhone应用程序开发 - Paul Hegarty - Stanford CS193p课程。前往讲座(25)9.桌面视图为26分钟英寸