iOS – Objective-C无法使用标识符对单元格进行出列

‘无法使用标识符消息将单元格出列 – 必须为标识符注册一个nib或类,或者在故事板中连接一个原型单元格’

#import "SidebarViewController.h"
#import "SWRevealViewController.h"



@interface SidebarViewController ()

@property (nonatomic, strong) NSArray *menuItems;
@end



@implementation SidebarViewController


    NSArray *menuItems;



- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        //custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    menuItems = @[@"title", @"news ", @"comments", @"map", @"calendar", @"wishlist", @"bookmark", @"tag"];


}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return menuItems.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *CellIdentifier = [menuItems objectAtIndex:indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    return cell;
}

@end

标识符如下所示:

《iOS – Objective-C无法使用标识符对单元格进行出列》

我该怎么办?

我正在尝试添加左侧幻灯片菜单,但是当我按下菜单按钮时它会崩溃.

最佳答案 你实际上非常接近,你的问题是许多新开发人员感到沮丧的原因. dequeueReusableCell有两种不同的,互斥的(竞争?)API,你不小心将它们混合在一起.

1.

- (__kindofUITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier 

在iOs2.0中介绍.
此方法能够返回nil,并且当它完成时,由您来创建单元格.

2.

- (__kindofUITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath

介绍了iOs6.0
此方法不应该返回nil.它要求您为表中的每个索引路径注册UITableViewCell类和标识符,然后为您“自动”创建单元格. (这恰好是UICollectionView的引入,它是如何工作的)

解.
您正在使用第一种方法(这很好),但您已经使用了第二种方法.
将你的cellForRow …方法更改为以下内容:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *CellIdentifier = @"someStaticString" ; 
    //btw, it is poor practice to name variables with a capital. Save that for classes/types
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        cell = [[MYcellClass alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier: CellIdentifier]; 
    }
    //configure cell
    return cell;
}

要么…
使用tableView注册您的单元类/原型和标识符组合(是的,您可以对所有索引使用相同的设置..)然后保持您的代码不变.

恕我直言,这是一个非常常见的错误,并且没有记录得非常好,只有在iOs6之前一直在开发的人和第二种方法的引入在没有帮助的情况下看到差异.最好.

点赞