我的问题与this one非常相似 我在Interface Builder中使用故事板设计的自定义原型单元将所有内部对象设置为nil(未创建),因此当我尝试为它们分配值时,它们保持空白。
我正在使用Xcode 4.6.2,并在6.1 iPhone模拟器中运行代码。这就是我所做的:
目前,该表格显示正确的部分数量和数量。行,但未设置单元格的值。
这是cellForRowAtIndexPath:(NSIndexPath *)indexPath
代码:
NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"];
我总是回到一个单元格,内存位置似乎可以用于有效对象。
但是当我尝试cell.name.text = [thisServer name];
时,我发现cell.name
标签总是为零
没有崩溃 - 但是我的领域没有被设置。
我已经检查了一百万次标识符是好的 - 它是! 我已经浏览了故事板中的自定义单元格的Apple文档 - 但仍然遇到了这个令人沮丧的问题..
其他人有这个,并解决了吗?
答案 0 :(得分:23)
我今天在Xcode 5的故事板上遇到了这个问题。把几乎所有剩余的头发拉出后,我注意到我在viewDidLoad
:
[self.tableView registerClass:[SwitchTableViewCell class] forCellReuseIdentifier:@"Setting"];
糟糕!在故事板中使用原型单元时,此行是不必要的。故事板会自动为我配置。 SwitchTableViewCell *tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"Setting" forIndexPath:indexPath];
无需明确调用registerClass::
即可正常工作。
问题仍然存在为什么调用registerClass::
导致某些商店无法连接。
答案 1 :(得分:1)
解决此问题的一个简单方法是在原型中标记UILabel并使用以下方法对其进行操作:
UILabel* label = [cell viewWithTag:cellTag];
label.text = [thisServer name]
答案 2 :(得分:1)
这是最明显错过的原因(我一直这么做!):
您是否已将tableview的委托和数据源设置为控制器? (即自我)
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
_tableView.delegate = self;
_tableView.dataSource = self;
}
答案 3 :(得分:1)
希望你已经解决了这个问题。无论如何,因为我没有看到你问题的直接答案,我写下来了。
根据我在故事板中使用自定义Prototype单元的经验,也提供indexPath。使用以下方法:
MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath];
代替此代码:
NewServerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"serverNameCell"];
更改此功能可以轻松解决此问题。您将在桌面视图中看到所有连接的标签和图像视图及其值。
答案 4 :(得分:1)
在这个问题上我的头很难受。结果是我在CustomUITableViewCell.h文件中用retain
而不是strong
声明我的IBOutlets。我想我需要更多地研究内存管理。
错:
@property (nonatomic, retain) IBOutlet UIImageView *preview;
正确:
@property (nonatomic, strong) IBOutlet UIImageView *preview;
答案 5 :(得分:1)
检查你是如何初始化TableViewController的。 我遇到了同样的问题,然后我发现我没有适当地引用我的TableViewController。
所以我必须在“pushViewController”之前更改我的代码。
而不是:[[TableViewController alloc]init]
使用:[self.storyboard instantiateViewControllerWithIdentifier:yourTableViewIdentifier]
并且不要忘记删除任何为您的tableview注册单元类的代码,例如:[self.tableView registerClass:[SwitchTableViewCell class] forCellReuseIdentifier:@"Setting"];
希望有所帮助
答案 6 :(得分:0)
尝试一些事情:
听起来你知道自己在做什么,但我会提到明显只是为了提醒你。确保“name”属性设置为IBOutlet。在IB中,您可以设置文件所有者的类类型,将此设置为 你的自定义类。
为了排除故障,取出出队的东西 暂时尝试一下。
尝试“名称”以外的其他属性名称我不相信“名称” 但是存在于基类中。
之前我遇到过类似的事情,这可能很简单。
答案 7 :(得分:0)
我也有完全相同的问题(标签在单元格中为nil
)。
我的补救措施是删除initWithCoder
方法,我意外地"尝试其他东西时添加到表视图中。当从故事板发起单元格时,将调用此方法。如果您覆盖它并且不打算自己启动其中的所有标签,那么您最终会得到nil
标签。
因此,作为此症状的一个潜在错误:检查是否存在此方法。
-(id)initWithCoder:(NSCoder *)decoder {
self = [self init];
return self;
}