使用 NSFetchedResultsController 委托方法将多行插入 tableView 时的问题
Posted
技术标签:
【中文标题】使用 NSFetchedResultsController 委托方法将多行插入 tableView 时的问题【英文标题】:Issues when inserting multiple rows into a tableView using NSFetchedResultsController delegate methods 【发布时间】:2017-01-26 05:22:00 【问题描述】:因此,我将 NSFetchedResultsController 用于始终增加 10 或可被 10 整除的任何数字的实体。我遇到的问题是,在为 NSFetchResultsController 调用委托方法并插入行之后, tableView 将滚动到某个随机点(通常朝向表格底部)。我不知道这是否是单元格高度的问题(动态),或者单元格包含需要加载的图像这一事实,或者我是否处理了错误的委托方法,或者我是否错误地创建对象。任何帮助将不胜感激
另外,我使用的是 MoPub,因此是 mp_
NSFetchedResultsControllerDelegate 方法
func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>)
self.tableView.mp_beginUpdates()
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?)
switch type
case NSFetchedResultsChangeType.insert:
guard let insertIndexPath = newIndexPath else return
self.tableView.mp_insertRows(atIndexPaths: [insertIndexPath], with: .fade)
case NSFetchedResultsChangeType.delete:
guard let deleteIndexPath = indexPath else return
self.tableView.mp_deleteRows(atIndexPaths: [deleteIndexPath], with: .fade)
default:
break
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>)
self.tableView.mp_endUpdates()
插入方法
for index in 0..<posts.count
let post = posts[index]
guard let _ = RecentPost.createInManagedObjectContext(context: context, post: post, sequence: index) else continue
createInManagedObjectContext
只是我用来插入新对象的一种方法,post.count
始终是 10 的除数
【问题讨论】:
您没有实施更新/移动的任何原因? 数据从未更新或移动,但值得一试。我会在今天晚些时候在我的电脑前添加它们。 【参考方案1】:由于我的单元格高度是动态的,我将 estimatedRowHeight
设置为 300,将其更改为 1000 似乎可以解决我的问题。如果您知道除此之外的任何其他修复方法,或者对我的代码有任何改进,请告诉我。谢谢
这就是我的答案。 https://***.com/a/38867302/4745553
编辑
实际上我仍然有一个问题,因为我正在响应多个更改,所以我只是使用controllerDidChangeContent
委托方法并在他们的中调用tableView.reloadData()
。他们不是动画,但我正在做的没关系。
这也帮助我修复了它。 https://***.com/a/3013353/4745553
【讨论】:
以上是关于使用 NSFetchedResultsController 委托方法将多行插入 tableView 时的问题的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 3 中难以配置 NSFetchedResultsController