微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TableView NSFetchedResultsController CoreData:错误

如何解决TableView NSFetchedResultsController CoreData:错误

我有一个由 FetchResultController 管理的 tableview。 假设 fetch 请求给了我 99 个对象。 我想在索引 20 处添加一个额外的单元格(广告)。 就像我的数据由 FetchResultController 管理一样,我必须在 numberOfRows 中播放才能显示不显示我的广告。但是 CoreData 在 tableView.endUpdates() 的末尾似乎很困惑。

'Invalid update: invalid number of rows in section 1. The number of rows contained in an existing section after the update (100) must be equal to the number of rows contained in that section before the update (0),plus or minus the number of rows inserted or deleted from that section (99 inserted,0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in,0 moved out).'

我尝试在 tableView.beginUpdate() 和 tableView.endUpdate() 之间添加一行

func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>,didChange anObject: Any,at indexPath: IndexPath?,for type: NSFetchedResultsChangeType,newIndexPath: IndexPath?)

但 tableView 似乎只关心 NSFetchedResultController 何时驱动插入和删除行。

有人有想法吗?

解决方法

那不是核心数据错误,而是你的表视图告诉你它很困惑。 UITableView 会仔细跟踪它应该显示的行数。它询问有多少行。插入或删除行时,从 tableView(_:numberOfRowsInSection:) 返回的行数正确更改至关重要。

这意味着,如果您调用 insertRows(at:with:) 并插入一些行,则 tableView(_:numberOfRowsInSection:) 返回的值必须 增加相同的数字。这些消息告诉您的是:

  1. 表格视图询问显示多少行,你返回0
  2. 您在更新中插入了 99 行
  3. table view询问要显示多少行,你返回了100

这就是问题所在。你从 0 开始,加上 99,然后声称结果是 100。如果你想多出一行,你需要在更新过程中再插入一行。如果你不想插入行,你需要确保当表视图询问行数时,你说的是 99 而不是 100。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。