必须为标识符注册一个nib或类或连接原型单元

时间:2013-11-09 20:57:18

标签: ios objective-c uitableview

我有一个menu的默认主 - 详细信息表视图。该菜单有效,但出于某种原因,按“+”按钮在我的应用中添加另一个单元格时出现以下错误:

  

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法使用标识符Cell对单元格进行出列 - 必须为标识符注册nib或类或在故事板中连接原型单元格

我搜索了几天的解决方案

如果我添加到viewDidLoad

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

我没有收到错误,但添加的单元格不是我的情节提要中配置的单元格,也没有指向详细视图控制器。

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

据我所知,它似乎与问题here具有相同性质。

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

请求的代码(两者都是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;
}

同时查看评论中添加的图片和项目文件

1 个答案:

答案 0 :(得分:2)

替换[MAAppDelegate application:didFinishLaunching]

中的以下行
UINavigationController *masterViewController = [[UINavigationController alloc] initWithRootViewController:[MAMasterViewController new]];

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

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

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

所以解决方案很简单。只需使用现有的根视图控制器[storyboard instantiateViewControllerWithIdentifier:]配置TWTSideMenuViewController