我在我的项目中使用tableview apple的延迟加载代码,但在项目中有异常。错误是 - *** Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]
,这是我的代码,请帮助。但是它在其他项目中工作。我没有委托方法。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"LazyTableCell";
static NSString *PlaceholderCellIdentifier = @"PlaceholderCell";
NSUInteger nodeCount = [self.entries count];
if (nodeCount == 0 && indexPath.row == 0)
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:PlaceholderCellIdentifier];
cell.detailTextLabel.text = @"Loading…";
return cell;
}
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (nodeCount > 0)
{
AppRecord *appRecord = [self.entries objectAtIndex:indexPath.row];
cell.textLabel.text = appRecord.name;
if (!appRecord.appIcon)
{
if (self.mytable_view.dragging == NO && self.mytable_view.decelerating == NO)
{
[self startIconDownload:appRecord forIndexPath:indexPath];
}
cell.imageView.image = [UIImage imageNamed:@"Placeholder.png"];
}
else
{
cell.imageView.image = appRecord.appIcon;
}
}
return cell;
}
答案 0 :(得分:31)
因为cellForRowAtIndexPath
返回nil
值,然后configureCellForDisplay
期待UITableViewCell
。故事板或XIB
没有使用您指定的单元格标识符定义的单元格。更好地检查标识符的拼写。
答案 1 :(得分:13)
请检查代表。
您是否添加了两名代表?
UITableViewDelegate
,UITableViewDataSource
import UIKit
class UserFriendVC: UIViewController, UITableViewDelegate, UITableViewDataSource
{
override func viewDidLoad() {
super.viewDidLoad()
}
}
答案 2 :(得分:4)
你应该从"显示属性检查器"中添加cellIdentifier。请像下面的片段一样休闲。
首先将以下代码添加到您的-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
delagate方法中。
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
ResultCustomTableViewCell *cell = (ResultCustomTableViewCell *)[resultTableView dequeueReusableCellWithIdentifier:@"ResultTableViewCellIdentifier"];
...
//set the cell property
...
return cell;
}
然后跳转"显示属性检查器",选择单元格根视图。
然后将相同的标识符名称粘贴到"显示属性检查器"中的标识符部分。在这种情况下,我使用此ResultTableViewCellIdentifier。
还有一个想法。如果您使用自定义单元格,就像这个场景一样,您必须添加以下委托metod。因为您的自定义单元格高度可以更高或更小的原始tableview高度。此外,您应该在viewDidLoad中注册此笔尖。
- (void)viewDidLoad {
[resultTableView registerNib:[UINib nibWithNibName:@"ResultCustomTableViewCell" bundle:nil] forCellReuseIdentifier:[ResultCustomTableViewCell reuseIdentifier]];
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
CGFloat height = 0.0;
if (tableView == resultTableView){
height = 44.0f;
}
return height;
}
我希望,它能解决你的问题
答案 3 :(得分:1)
CellIdentifier
我打赌你的cellForRowAtIndexPath
正在返回零。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"LazyTableCell";
static NSString *PlaceholderCellIdentifier = @"PlaceholderCell";
NSUInteger nodeCount = [self.entries count];
if (nodeCount == 0 && indexPath.row == 0) {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:PlaceholderCellIdentifier];
if(cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:PlaceholderCellIdentifier] autorelease];
}
cell.detailTextLabel.text = @"Loading…";
return cell;
}
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
if (nodeCount > 0) {
AppRecord *appRecord = [self.entries objectAtIndex:indexPath.row];
cell.textLabel.text = appRecord.name;
if (!appRecord.appIcon)
{
if (self.mytable_view.dragging == NO && self.mytable_view.decelerating == NO)
{
[self startIconDownload:appRecord forIndexPath:indexPath];
}
cell.imageView.image = [UIImage imageNamed:@"Placeholder.png"];
}
else
{
cell.imageView.image = appRecord.appIcon;
}
}
return cell;
}
这可能是[UITableView _configureCellForDisplay:forIndexPath:]
失败的原因...因为cellForRowAtIndexPath
返回空值,然后configureCellForDisplay
期待UITableViewCell
。
答案 4 :(得分:1)
使用
以- (void)viewDidLoad
方法注册您的单元格
[self.tableView registerClass:UITableViewCell.class forCellReuseIdentifier:@"Your Reuse Identifier"];
(如果您正在使用情节提要),如果使用自定义单元格,请使用此功能。
[self.tableView registerNib:UINib nibWithNibName:@"Your File Name.xib" bundle:nil forCellReuseIdentifier:@"Your Reuse Identifier"]