Ios 故事板中的原型单元不创建UILabel等

Ios 故事板中的原型单元不创建UILabel等,ios,objective-c,uitableview,storyboard,Ios,Objective C,Uitableview,Storyboard,我的问题非常类似。 我在Interface Builder中使用故事板设计的自定义原型单元的所有内部对象都设置为nil(未创建),因此,当我尝试为它们赋值时,它们仍然为空 我正在使用Xcode 4.6.2,并在6.1 iPhone模拟器中运行代码。以下是我所做的: 在interface builder中设计了一个带有必要字段的原型单元 在代码中为此自定义单元格创建UITableViewCell的子类,然后在interface builder中将该单元格设置为此类型 控件将字段拖到.h文件中,该

我的问题非常类似。
我在Interface Builder中使用故事板设计的自定义原型单元的所有内部对象都设置为nil(未创建),因此,当我尝试为它们赋值时,它们仍然为空

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

  • 在interface builder中设计了一个带有必要字段的原型单元
  • 在代码中为此自定义单元格创建UITableViewCell的子类,然后在interface builder中将该单元格设置为此类型
  • 控件将字段拖到.h文件中,该文件为我设置了对象(UILabels等)。我将单元格的标识符设置为“serverNameCell”
  • 将表的数据源和委托设置为表所在的Viewcontroller
  • 将表格与ViewControler中的表格对象关联
此时,表格显示了正确的节和行数,但未设置单元格的值

这是
cellforrowatinedexpath:(nsindepath*)indepath
code:

NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"];
我总是得到一个单元格,对于一个有效的对象,内存位置似乎还可以

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

我已经检查了一百万次,确认标识符是正确的-它是正确的! 我已经从故事板上浏览了苹果公司定制电池的文档,但仍然遇到了这个令人沮丧的问题

还有其他人有这个问题,并且解决了吗

一些可以尝试的东西:

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

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

  • 只是为了排除故障,把排队的东西拿出来 暂时尝试一下

  • 请尝试“name”以外的其他属性名称我不相信“name” 但存在于基类中


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

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

UILabel*label=[cell viewWithTag:cellTag];

label.text=[thisServer name]

这是最明显遗漏的原因(我一直这么做!):

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


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

[self.tableView注册表类:[SwitchTableViewCell类]强制重用标识符:@“设置”]

哎呀!在故事板中使用原型单元时,不需要这一行。故事板会自动为我配置这个<代码>SwitchTableViewCell*tableViewCell=[tableView dequeueReusableCellWithIdentifier:@“设置”为indexPath:indexPath]工作正常,无需显式调用注册表类::


问题仍然是,为什么调用注册表类::会导致某些插座无法连接。

希望您已经解决了此问题。无论如何,因为我没有看到一个直截了当的答案,你的问题,我写下这一点

根据我在故事板中使用自定义原型单元的经验,还提供了indexPath。使用以下方法:

MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath];
而不是此代码:

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

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

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

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

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

-(id)initWithCoder:(NSCoder *)decoder {
    self = [self init];
    return self;
}

这件事太让我头疼了。结果是我在CustomUITableViewCell.h文件中用
retain
而不是
strong
声明了我的IBOutlets。我想我需要更多地研究内存管理

错:

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

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

检查如何初始化TableViewController。 我也有同样的问题,然后我发现我没有正确地引用TableViewController

所以我必须在“pushViewController”之前更改代码

而不是:
[[TableViewController alloc]init]
使用:
[self.storyboard实例化eviewcontrollerwhiteIdentifier:yourTableViewIdentifier]

不要忘记删除任何为tableview注册单元格类的代码,如:
[self.tableview registerClass:[SwitchTableViewCell类]forCellReuseIdentifier:@“设置”]


希望它能有所帮助

如果您登录cell,它会说它是NewServerCell,而不是UITableViewCell吗?@rdelmar:是的,它是NewServerCell,但它的所有属性(以及它的ancester UITableViewCell的属性)都是nillhmm。。。。这种问题很难诊断,因为你所说的一切听起来都是正确的。您是否使用了其中一种注册方法(用于注册类或nib)?如果单元是在故事板中生成的,则不应使用这两种单元中的任何一种。您的自定义单元格代码中除了IBOutlets之外还有其他内容吗?@rdelmar:我尝试了使用和不使用
注册类forCellReuseIdentifier
——现在没有,也没有骰子。除了(连接的)iBoutlets什么都没有如果你在某个地方
@property (nonatomic, retain) IBOutlet UIImageView  *preview;
@property (nonatomic, strong) IBOutlet UIImageView  *preview;