我正在学习iOS,我正在使用UITableView进行练习。我已经为表行构建了自己的单元格,我想添加它但是如果条件有NIB指针我有问题。当应用程序到达此点时,它崩溃并且消息如下:
Could not load NIB in bundle: 'NSBundle </Users/myAccount/Library/Application Support/iPhone Simulator/7.1/Applications/90329AC3-7DAB-4F74-A147-103AE240A582/BetterApplication.app> (loaded)' with name 'Cell'
我不完全理解这个错误,而不是它无法加载此文件。怎么解决?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"Cell";
SimpleTableCellTableViewCell *cell = (SimpleTableCellTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"Cell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
cell.nameLabel.text = [tableData objectAtIndex:indexPath.row];
cell.thumbnailImageView.image = [UIImage imageNamed:[images objectAtIndex:indexPath.row]];
//cell.prepTimeLabel.text = [prepTime objectAtIndex:indexPath.row];
return cell;
}
答案 0 :(得分:1)
使用NIB:
问题是您的nib
未命名为Cell
。
您必须插入nib文件的名称。
无论如何,鼓励你在viewDidLoad
中注册笔尖:
[yourTable registerNib:[UINib nibWithNibName:@"YourCellNibName" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"Cell"];
我还建议您为您的Nib 文件使用重要名称。例如,使用MyCustomCell
或更具体的名称,例如类SimpleTableCellTableViewCell
的名称。
如果您使用此代码,最终代码将为:
static NSString *const simpleCellTableIdentifier = @"simpleCellTableIdentifier";
- (void)viewDidLoad {
//Your stuff
[yourTable registerNib:[UINib nibWithNibName:@"SimpleTableCellTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:simpleCellTableIdentifier];
//Your staff
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
SimpleTableCellTableViewCell *cell = (SimpleTableCellTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleCellTableIdentifier];
if (cell == nil)
{
cell = [[SimpleTableCellTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleCellTableIdentifier]
}
cell.nameLabel.text = [tableData objectAtIndex:indexPath.row];
cell.thumbnailImageView.image = [UIImage imageNamed:[images objectAtIndex:indexPath.row]];
return cell;
}
使用故事板:
您只需确保在Cell
中将Identifier
设置为 storyboard
,然后写:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"Cell";
SimpleTableCellTableViewCell *cell = (SimpleTableCellTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];
cell.nameLabel.text = [tableData objectAtIndex:indexPath.row];
cell.thumbnailImageView.image = [UIImage imageNamed:[images objectAtIndex:indexPath.row]];
//cell.prepTimeLabel.text = [prepTime objectAtIndex:indexPath.row];
return cell;
}
答案 1 :(得分:-1)
可能是因为您忘记注册一些可重复使用的单元类。
在使用单元格之前,请尝试将它们注册到您的表中,如下所示:
[tableView registerClass:[SimpleTableCellTableViewCell class] forCellReuseIdentifier:@"Cell"];
您可以在awakeForNib
中或在创建表格后立即添加此调用。
我更喜欢注册具有相同名称的单元格,如下所示:
Class CellClass = [SimpleTableCellTableViewCell class]
[tableView registerClass:CellClass forCellReuseIdentifier:NSStringFromClass(CellClass)];
你可以像这样重用它:
Class CellClass = [SimpleTableCellTableViewCell class]
[table dequeueReusableCellWithIdentifier:NSStringFromClass(CellClass)]