无法使 table 视图单元格出队
Unable to dequeue table view cell
我正在尝试在我的 iOS 应用程序中创建动态 table,但不断收到臭名昭著的消息:
unable to dequeue a cell with identifier CEMBurialCell - must register a nib or a class for the identifier".
下面是我的代码,但它不起作用。
下面是主控中的一些数据
#import "CEMBurialCell.h" // The custom cell I want to use in the tableView
@interface CEMMainViewController () <UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate>
{
UITableView *deathstoday;
}
这是 viewWillAppear:
方法中的一些代码。
deathstoday = [[UITableView alloc] initWithFrame:CGRectMake(1, 370, 300, 50)];
deathstoday.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
deathstoday.delegate = self;
deathstoday.dataSource = self;
deathstoday.scrollEnabled = YES;
[self.view addSubview:deathstoday];
[self fetchfeed]; // This populates the array for the tableview
这是 viewDidLoad
方法中的代码。
UINib *nib = [UINib nibWithNibName:@"CEMBurialCell" bundle:nil];
[deathstoday registerNib:nib forCellReuseIdentifier:@"CEMBurialCell"];
这是我收到错误的地方:
unable to dequeue a cell with identifier CEMBurialCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CEMBurialCell *cell = [tableView
dequeueReusableCellWithIdentifier:@"CEMBurialCell" forIndexPath:indexPath];
我在 viewDidLoad
方法中初始化了 CEMBurialCell
,为什么会出现此错误?我让这个例程在一个初始化为:
的程序中工作
self = [super initWithStyle:UITableViewStylePlain]; // in program that does work
而无法运行的程序的初始化为
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; // in program that doesn't work
所以以上两行是两个程序的主要区别。我使用自定义单元格而不是 UITableView
单元格,因为我的单元格中需要一个 actionBlock。那么为什么第二个程序在我的自定义单元格上出现错误呢?相同的自定义单元格 CEMBurialCell
在另一个程序中工作。我错过了什么?
你的问题很简单。在 viewDidLoad
中,deathstoday
是 nil
所以你实际上并没有注册笔尖。
为什么要等到 viewWillAppear:
才创建 table 视图?在调用 registerNib:forCellReuseIdentifier:
.
之前,您应该在 viewDidLoad
中创建 table 视图
只需确保 table 视图的框架基于 self.view.bounds
,这样 autoresizingMask
就能按预期工作。
我正在尝试在我的 iOS 应用程序中创建动态 table,但不断收到臭名昭著的消息:
unable to dequeue a cell with identifier CEMBurialCell - must register a nib or a class for the identifier".
下面是我的代码,但它不起作用。
下面是主控中的一些数据
#import "CEMBurialCell.h" // The custom cell I want to use in the tableView
@interface CEMMainViewController () <UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate>
{
UITableView *deathstoday;
}
这是 viewWillAppear:
方法中的一些代码。
deathstoday = [[UITableView alloc] initWithFrame:CGRectMake(1, 370, 300, 50)];
deathstoday.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
deathstoday.delegate = self;
deathstoday.dataSource = self;
deathstoday.scrollEnabled = YES;
[self.view addSubview:deathstoday];
[self fetchfeed]; // This populates the array for the tableview
这是 viewDidLoad
方法中的代码。
UINib *nib = [UINib nibWithNibName:@"CEMBurialCell" bundle:nil];
[deathstoday registerNib:nib forCellReuseIdentifier:@"CEMBurialCell"];
这是我收到错误的地方:
unable to dequeue a cell with identifier CEMBurialCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CEMBurialCell *cell = [tableView
dequeueReusableCellWithIdentifier:@"CEMBurialCell" forIndexPath:indexPath];
我在 viewDidLoad
方法中初始化了 CEMBurialCell
,为什么会出现此错误?我让这个例程在一个初始化为:
self = [super initWithStyle:UITableViewStylePlain]; // in program that does work
而无法运行的程序的初始化为
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; // in program that doesn't work
所以以上两行是两个程序的主要区别。我使用自定义单元格而不是 UITableView
单元格,因为我的单元格中需要一个 actionBlock。那么为什么第二个程序在我的自定义单元格上出现错误呢?相同的自定义单元格 CEMBurialCell
在另一个程序中工作。我错过了什么?
你的问题很简单。在 viewDidLoad
中,deathstoday
是 nil
所以你实际上并没有注册笔尖。
为什么要等到 viewWillAppear:
才创建 table 视图?在调用 registerNib:forCellReuseIdentifier:
.
viewDidLoad
中创建 table 视图
只需确保 table 视图的框架基于 self.view.bounds
,这样 autoresizingMask
就能按预期工作。