xcode/ios/coredata:添加新记录后,表视图中的最后一条记录显示两次



我遇到了一个奇怪的问题。当我将一条记录添加到实体中时,即来自某些屏幕的核心数据,表视图将重复上一条记录,而不是显示新记录。

它总是发生在一些实体和屏幕上,即如果我添加记录、1、2、3等,它将显示1、1、1。对于使用相同代码的其他屏幕和实体,这种情况有时会发生,通常发生在第八条到第十条记录之后。

在这些情况下,如果我添加名为1,2,3…10的记录,它将显示1,2,3,4,5,6,7,8,8,8,8等。

有人遇到过这种奇怪/诡异的行为吗?为什么它会认为新记录与前一记录相同,无论是现在还是在某个时候,即当记录数量达到8条左右时?

注意,它保存了很好的核心数据,因为当我关闭模拟器并重建时,它会显示正确的记录。

委托模式似乎也在某种程度上起作用,因为它在添加一个记录时显示一个新记录,只显示最后一个记录的副本,然后显示它被卡住的记录,即8,8,8等。

谢谢你的建议。这已经让我发疯一个星期了。

我在没有代码的情况下发布,因为SO出于某种原因不会接受我发布的代码。。。很乐意发布任何要求的代码。

编辑:

#pragma mark - Table view data source
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
        Lists *list = [self.fetchedResultsController objectAtIndexPath:indexPath];
        cell.textLabel.text = list.listname;
        cell.detailTextLabel.text = list.list;
        return cell;
    }

回应Duncan:

苹果公司的文件说明:

"委托必须至少实现一个更改跟踪委托方法,才能启用更改跟踪。提供controllerIdChangeContent:的空实现就足够了。"

我的代码包括:

#pragma mark - NSFetchedResultsControllerDelegate
-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    //change
}

我知道有一种更详细的方法可以更改内容,并且确实可以针对不同的情况使用switch语句更改内容,但文档中说这不是必要的。(我也试过了,但没有解决问题。)我用声明列表文件为头中的委托

@interface ListsVC : UITableViewController<UITableViewDataSource, UITableViewDelegate,NSFetchedResultsControllerDelegate>

对我来说,这是TableView中的一个错误。事实上,最后一行显示了两次,但"最后一行"是空的。我通过在链接的css中添加这段代码解决了这个问题(用相同的背景和文本填充颜色填充空行并删除边框)。它很好用!

.table-row-cell:empty .table-cell 
-fx-border-width: 0px;
-fx-background-color: white;
-fx-text-fill: white;

最新更新