我正在尝试构建一个多层xmlparser,它在tableview中显示数据,并根据所选行切换到下一个视图(最有可能是同一个viewcontroller)。
我从故事板segues开始,但由于我使用动态单元格,我不知道如何创建多个push segue(因为它需要推送到各种viewcontrollers)。所以我保留了故事板视图,删除了所有的segues并使用了下面的代码。
然而,当新视图试图对行进行合并时,它会抛出此异常:
由于未捕获的异常而终止应用 'NSInternalInconsistencyException',原因:'UITableView dataSource 必须从tableView:cellForRowAtIndexPath:'
返回一个单元格
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"index: %i", indexPath.row);
switch (indexPath.row) {
case 0:
{
DetailViewController *detailViewController = [DetailViewController alloc];
[self.navigationController pushViewController:detailViewController animated:YES];
break;
}
//...
default:
{
LayerViewController *layerViewController= [LayerViewController alloc];
[layerViewController setStartUpWithIndex:indexPath.row andLayer:layercount];
[self.navigationController pushViewController:layerViewController animated:YES];
break;
}
}
}
setStartUpWithIndex:andLayer:是我的init方法......
使用以下segue代码通过storyboard segue推送时不会出现问题:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
[[segue destinationViewController] setStartUpWithIndex:indexPath.row andLayer:layercount];
}
我想我错过了一些“segue”方法,我需要将其包含在didSelectRowAtIndexPath中作为cellForRowAtIndexPath:在视图的第一层中正常工作。
请求编辑:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"LayerCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.textLabel.text = [[articles objectAtIndex:indexPath.row]objectForKey:@"HerstellerName"];
// cell.textLabel.text = @"ololol";
return cell;
}
文章数组正在运行btw
答案 0 :(得分:1)
您没有创建任何单元格。我不知道为什么Apple没有在默认实现中包含它,但在:
之后UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
您需要添加:
if (cell==nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
否则,您只是依赖于在加载tableView时不存在的出列单元格。
编辑:如果您不使用ARC,则需要使用自动释放包装该alloc方法。
答案 1 :(得分:0)
您正在推送另一个viewController进行查看,下一个viewController没有实现dataSource方法。发生了什么。
据我所知,您试图以每个表行包含呈现节点的子节点的方式呈现带有表的xml节点。选择具有chld节点的行可以转到下一个表视图,该表显示具有所选节点的子节点的表。
IMO您可能只需要一个视图控制器来呈现当前的xml节点,该节点仅更改要在表中显示的数据并再次重新加载表。因此不需要推动视图控制器。您可以使用then方法
– reloadRowsAtIndexPaths:withRowAnimation:
对于表中的所有节点,设置类似于更改视图控制器的动画(也就是左侧滑动旧表)