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

Posted

技术标签:

【中文标题】xcode/ios/coredata:添加新记录后,tableview 中的最后一条记录显示两次【英文标题】:xcode/ios/coredata: Last record in tableview displays twice when after adding new record 【发布时间】:2015-03-20 18:22:54 【问题描述】:

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

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

在这些情况下,如果我添加名为 1,2,3…10 的记录,它将显示 1,2,3,4,5,6,7,8,8,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;
    

回应邓肯:

Apple 的文档指出:

“一个委托必须至少实现一个变更跟踪委托方法才能启用变更跟踪。提供一个空的controllerDidChangeContent实现:就足够了。”

我的代码包括:

#pragma mark - NSFetchedResultsControllerDelegate

-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
    //change

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

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

【问题讨论】:

你能发布 cellForRowAtIndexPath 方法吗? 您是否正确实现了 FetchedResultsController 委托方法?为他们发布代码。 我似乎终于找到了一个解决方案。它与排序描述符在不同的属性上排序有关,即与正在输入的字段相比,这显然会干扰委托过程。关于这是否是一个错误存在争议。在这里查看乔迪·哈金斯的回答:***.com/questions/12370521/… 【参考方案1】:

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

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

【讨论】:

以上是关于xcode/ios/coredata:添加新记录后,tableview 中的最后一条记录显示两次的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 ODBC 在添加新记录后立即失败?

如何在jqgrid中添加任何新记录后对行进行排序

删除后保存记录

Linq To EF (添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)

添加参数,如果执行存储过程后没有返回记录,则显示消息

如何在水晶报表中的最后一条记录后添加空白记录?