在Storyboard中使用UITableViewCell时使用alloc和init

时间:2013-02-13 23:33:12

标签: ios objective-c uitableview storyboard

我正在使用Storyboard创建一个简单的应用程序,其中包含UITableViewUITableViewCell的视图,可以导航到另一个UIView

所以必须编写代码来填充表格视图中的单元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"SampleCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
        NSLog(@"cai no init da cell");
    }

    GPItem *item = [self.items objectAtIndex:indexPath.row];

    cell.textLabel.text = @"Post";
    cell.detailTextLabel.text = item.imageURL;

    return cell;
}

我意识到代码if (cell == nil) { ...从未执行过,所以我真的需要在使用Storyboard中的单元格时这样做吗?

感谢。

3 个答案:

答案 0 :(得分:5)

你是对的;如果您使用的是故事板,则可以保证该代码返回非零单元格。此外,在iOS 6中,新调用dequeueReusableCellWithIdentifier:forIndexPath: 从不返回nil。请参阅我的书中的讨论:

http://www.apeth.com/iOSBook/ch21.html#_registering_a_cell_class

答案 1 :(得分:0)

如果你已经在表视图的原型单元格中声明了UITableViewCell,那么它已经被分配,只需要出列。如果您正在使用自定义UITableViewCell子类,那么您必须检查它是否为零并在必要时分配新实体。

答案 2 :(得分:0)

在使用故事板中制作的单元格时,您不需要该代码。

最好删除此代码,以便在界面构建器中为单元格提供的identifier和代码中使用的标识符漂移时,您可以尽早崩溃。该片段将掩盖此错误,只提供您可能不想要的单元格。