6

我有一个带有菜单的默认主从表视图。该菜单有效,但由于某种原因,当我按下“+”按钮在我的应用程序中添加另一个单元格时出现以下错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法将具有标识符 Cell 的单元格出列 - 必须为标识符注册 nib 或类或连接情节提要中的原型单元格”

我搜索了几天的解决方案

如果我添加到viewDidLoad

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];

我没有收到错误,但添加的单元格不是我的故事板中配置的单元格,它们也不指向详细视图控制器。

我已经多次检查原型单元格的标识符字段是否已填写并且与 *cellIdentifier 相同。

据我所知,这似乎与这里提出的问题具有相同的性质。

任何帮助将不胜感激,如果您有时间,请解释为什么我所做的错误或为什么应该添加某些代码。

请求的代码(都是 Xcode 5.0.1 添加的默认代码):

// Code to add the button

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
self.navigationItem.rightBarButtonItem = addButton;

// Code called when button is pressed:

- (void)insertNewObject:(id)sender
{
    if (!_objects) {
        _objects = [[NSMutableArray alloc] init];
    }
        [_objects insertObject:[NSDate date] atIndex:0];
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
        [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    NSDate *object = _objects[indexPath.row];
    cell.textLabel.text = [object description];
    return cell;
}

还要查看评论中添加的图片和项目文件

4

1 回答 1

2

替换以下行[MAAppDelegate application:didFinishLaunching]

UINavigationController *masterViewController = [[UINavigationController alloc] initWithRootViewController:[MAMasterViewController new]];

UINavigationController *masterViewController = (UINavigationController *)self.window.rootViewController;

当应用程序到达didFinishLaunching时,已经从情节提要配置了根视图控制器(如果您查看情节提要,根视图控制器就是箭头指向它的那个)。请注意,此过程依赖于initWithCoder:初始化程序。

didFinishLaunching您丢弃此视图控制器时,将其替换为 的实例,该实例已配置为和TWTSideMenuViewController的新的非故事板实例。如果您考虑一下,就无法知道它应该从特定的故事板元素进行配置。实际上有一个用于从情节提要中实例化视图控制器的 API :. 但是您不需要这样做,因为它已经为您完成了。UINavigationControllerMAMasterViewController[MAMasterViewController new][storyboard instantiateViewControllerWithIdentifier:]

所以解决方法很简单。只需TWTSideMenuViewController使用现有的根视图控制器进行配置self.window.rootViewController

于 2013-11-11T01:02:39.537 回答