Ios 标识符重叠两个单元格的Deqeureusablecell

Ios 标识符重叠两个单元格的Deqeureusablecell,ios,objective-c,uitableview,Ios,Objective C,Uitableview,在UITableViewDataSource方法中,我检查是否有数据: - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section { if (data.count == 0) { return 1; //This one cell will be of type NoDataTypeCell } else { return da

UITableViewDataSource
方法中,我检查是否有数据:

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
    if (data.count == 0)
    {
       return 1; //This one cell will be of type NoDataTypeCell
    } else {
       return data.count //These cells will be of type DataTypeCell
    }
}
因此,在
cellforrowatinexpath
中,我以相同的方式检查要使用哪种类型的单元格:

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

    SAFindSuggestedTableViewCell* dataCell = (SAFindSuggestedTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"hasDataIdentifier" forIndexPath:indexPath];

    if (data.count == 0)
    {
        NODataTypeCell* cellNoData = (NODataTypeCell*)[tableView dequeueReusableCellWithIdentifier:@"noDataIdentifier];
        //Setup the noDataCell
        return cellNoData;

    } else {
        return dataCell;
    }
}
这导致了我从未见过的结果。正如预期的那样,我的控制器加载的数据是空的。结果,1个NodeDataTypeCell被出列

一旦数据进入,TableView就会重新加载

numberOfRowsInSection
返回
数据。计数

cellforrowatinexpath
不返回
noDataCell
,它返回
data.count
数据单元格的数量

除了我的tableView还有一个节点单元格。最奇怪的部分?它直接位于tableView中的第一个单元格上。该单元格不可选择,同时也使其后面的单元格不可选择。它没有数据,因为它尚未设置。但它就在那里,不会消失

我做错了什么

下面是单元格后面的视图调试器透视图。您可以清楚地看到第一行有两个单元格,第二行只有一个单元格
tableView dequeueReusableCellWithIdentifier:
将返回一个对象
cell
,并添加到
tableView

在上面的代码中:

 SAFindSuggestedTableViewCell* dataCell = (SAFindSuggestedTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"hasDataIdentifier" forIndexPath:indexPath];

if (data.count == 0)
{
    NODataTypeCell* cellNoData = (NODataTypeCell*)[tableView dequeueReusableCellWithIdentifier:@"noDataIdentifier];
如果
数据=0
。两个单元格已添加到
tableView
的相同indexath中。所以这就是bug的原因

您应该将代码分开,以在indexPath中精确返回一个单元格,如下所示:

if (data.count == 0)
{
    NODataTypeCell* cellNoData = (NODataTypeCell*)[tableView dequeueReusableCellWithIdentifier:@"noDataIdentifier];
    //Setup the noDataCell
    return cellNoData;

} else {
    SAFindSuggestedTableViewCell* dataCell = (SAFindSuggestedTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"hasDataIdentifier" forIndexPath:indexPath];
    return dataCell;
}

我看到你对坠机事件发表了评论。我认为这是因为您的逻辑与实际代码一致。

您是否尝试过将SAFindSuggestedTableViewCell的出列转移到else子句?因为即使您不返回要呈现的数据单元,出列过程似乎也无法再次处理出列。@CStreel这是我按照您的建议执行操作时引发的错误:由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:“-[\u UITableViewReorderingSupport\u needsSetup]:无法识别的选择器已发送到实例0x148b4b6d0'Yep您已获得它。逻辑上的问题是,这就是需要发生的事情