***断言失败 - [UITableView _configureCellForDisplay:forIndexPath:]

时间:2013-11-22 07:21:01

标签: ios

我在我的项目中使用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;

}

5 个答案:

答案 0 :(得分:31)

因为cellForRowAtIndexPath返回nil值,然后configureCellForDisplay期待UITableViewCell。故事板或XIB没有使用您指定的单元格标识符定义的单元格。更好地检查标识符的拼写。

答案 1 :(得分:13)

请检查代表。

您是否添加了两名代表?

UITableViewDelegateUITableViewDataSource

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;
}

然后跳转"显示属性检查器",选择单元格根视图。

enter image description here

然后将相同的标识符名称粘贴到"显示属性检查器"中的标识符部分。在这种情况下,我使用此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"]