这让我疯了!
我有一个带有通用原型单元的通用UITableViewController类,标识符为“myCell”。在ARC,iOS5下开发并使用Storyboard,我使用以下方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];
cell.textLabel.text = @"Title";
return cell;
}
一切都挂在故事板,文件所有者等等。我的项目中有几个其他UITableViewController,使用相同的概念。一切正常。 这个特殊类的UITableViewController不想工作!继续向我抛出异常:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
Nslog'ed - > [tableView dequeueReusableCellWithIdentifier:@“myCell”] =(null)
非常感谢任何想法和帮助!
编辑:
为简单起见: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 返回1; }
我已经完成的事情: 1.在故事板中删除并创建和设置UITableViewController! 2.重新启动Xcode 3.重启模拟器 4.重启电脑!!!! 5.一遍又一遍地删除并构建应用程序! 没有工作。
顺便说一句,我试过
if (cell == nil)
cell = [UITableViewCell alloc] initWithStyle....
..它将解决问题,但又一次......这是ARC,故事板,......我不应该这样做。 Xcode应该照顾它!
答案 0 :(得分:2)
您必须创建您的单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"myCell"] autorelease];
}
cell.textLabel.text = @"Title";
return cell;
}
答案 1 :(得分:2)
最终我发现了这个错误。我不能说我找到了根本原因,但逐行调查,这是我找到并为我工作的。
我的UITableViewController
中有一些对象需要在加载视图之前进行alloc / init',这样当调用者可以将它们设置为预先确定值时。由于viewDidLoad
为时已晚,我将它们放在initWithCoder
方法中。
注销并重写initwithCoder
方法解决了这个问题。在我看来,initWithCoder
方法正在启动UITableViewController
,因为它有些不同!
答案 2 :(得分:0)
我遇到了同样的问题而且设法克服了它。 如果要动态创建单元格数据,则必须执行以下操作:
它对我有用。我停止获得“零”单元格值,一切似乎都正常。
答案 3 :(得分:0)
如果“IF”语句对于以下内容变为true(cell == nil):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"myCell"] autorelease];
}
cell.textLabel.text = @"Title";
return cell;
}
然后,名称@"myCell"
拼写错误(不匹配)或从单元格的情节提要标识符字段中丢失。