7

我的问题与这个问题非常相似。
我使用情节提要在 Interface Builder 中设计的自定义原型单元格将所有内部对象设置为 nil(未创建),因此当我尝试为它们分配值时,它们保持空白。

我正在使用 Xcode 4.6.2,并在 6.1 iPhone 模拟器中运行代码。这是我所做的:

  • 在界面构建器中设计了一个具有必要字段的原型单元。
  • 在代码中为此自定义单元格创建了 UITableViewCell 的子类,然后将界面生成器中的单元格设置为这种类型。
  • 控制拖动字段到 .h 文件中,该文件为我设置了对象(UILabels 等)。我将单元格的标识符设置为“serverNameCell”
  • 将表的数据源和委托设置为表所在的 Viewcontroller。
  • 将表格与 ViewControler 中的表格对象相关联

目前,表格显示的部分和行数正确,但未设置单元格的值。

这是cellForRowAtIndexPath:(NSIndexPath *)indexPath代码:

NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"];

我总是取回一个单元格,并且内存位置对于有效对象似乎没问题。

但是当我尝试时,cell.name.text = [thisServer name];我发现cell.name标签总是为零。
没有崩溃 - 但我的字段没有被设置。

我已经检查了一百万次标识符是否正常 - 是的!我已经浏览了故事板中自定义单元格的 Apple 文档 - 但仍然遇到这个令人沮丧的问题..

其他人有这个,并解决了它?

4

8 回答 8

24

今天我在 Xcode 5 的故事板上遇到了这个确切的问题。在拔出几乎所有剩余的头发后,我注意到我正在调用它viewDidLoad

[self.tableView registerClass:[SwitchTableViewCell class] forCellReuseIdentifier:@"Setting"];

哎呀!在情节提要中使用原型单元时,不需要此行。故事板会自动为我配置这个。SwitchTableViewCell *tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"Setting" forIndexPath:indexPath];无需显式调用即可正常工作registerClass::

问题仍然存在,为什么呼叫registerClass::会导致某些插座无法连接。

于 2013-11-27T17:53:17.450 回答
1

这是最明显错过的原因(我一直这样做!):

您是否将 tableview 的委托和数据源设置为控制器?(即自己)

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    _tableView.delegate = self;
    _tableView.dataSource = self;
}
于 2013-10-22T05:30:45.543 回答
1

在这个上抓得太厉害了。retain最终是我用而不是strong在我的 CustomUITableViewCell.h 文件中声明了我的 IBOutlets 。我想我需要更多地研究内存管理。

错误的:

@property (nonatomic, retain) IBOutlet UIImageView  *preview;

正确的:

@property (nonatomic, strong) IBOutlet UIImageView  *preview;
于 2015-04-26T05:43:08.767 回答
1

希望您已经解决了这个问题。无论如何,由于我没有看到您的问题的直接答案,所以我将其写下来。

根据我在情节提要中使用自定义原型单元的经验,也提供 indexPath。使用以下方法:

MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath];

而不是这段代码:

NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"];

更改此设置将很容易解决此问题。您将看到所有连接的标签和图像视图,它们的值在 tableview 上可见。

于 2014-01-23T09:51:31.363 回答
1

解决此问题的一个简单方法是在原型中标记 UILabel 并使用以下命令对其进行操作:

UILabel* label = [cell viewWithTag:cellTag];
label.text = [thisServer name]

于 2013-05-12T05:34:12.150 回答
1

检查您如何初始化 TableViewController。我遇到了同样的问题,然后我认为我没有正确引用我的 TableViewController。

所以我不得不在“pushViewController”之前更改我的代码。

而不是:[[TableViewController alloc]init] 使用:[self.storyboard instantiateViewControllerWithIdentifier:yourTableViewIdentifier]

并且不要忘记为您的 tableview 删除任何注册单元格类的代码,例如:[self.tableView registerClass:[SwitchTableViewCell class] forCellReuseIdentifier:@"Setting"];

希望能帮助到你

于 2015-10-15T20:02:31.647 回答
0

一些东西可以尝试:

听起来您知道自己在做什么,但我会提到显而易见的事情来提醒您。确保“名称”属性设置为 IBOutlet。

  • 在 IB 中,您可以设置文件所有者的类类型,将其设置为您的自定义类。

  • 只是为了排除故障,暂时取出出队的东西并尝试一下。

  • 尝试除“name”之外的另一个属性名称我不相信“name”存在于基类中。

我以前遇到过类似的事情,这可能很简单。

于 2013-05-12T03:32:22.117 回答
0

我也有完全相同的问题(标签nil在单元格中)。

我的补救措施是删除initWithCoder我在尝试其他内容时“意外”添加到表视图中的方法。当单元格从情节提要启动时调用此方法。如果您覆盖它并且不注意自己启动其中的所有标签,那么您最终会得到nil标签。

因此,作为此症状的一个潜在错误:检查此方法是否存在。

-(id)initWithCoder:(NSCoder *)decoder {
    self = [self init];
    return self;
}
于 2014-11-28T13:25:47.900 回答