【发布时间】:2018-06-22 05:55:55
【问题描述】:
当行数填满视图时,UITableView 使用 NSFetchedResultsController 和 CoreData 与 beginUpdates() / endUpdates() / performBatchUpdates() 意外反弹。
重现非常简单。
- 从主从应用程序模板(使用 CoreData)创建一个新项目。
- 在情节提要中,删除“showDetail”转场。 (我们不需要详细视图)
- 在 MasterViewController 中,将 segue func prepare() 替换为:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let event = fetchedResultsController.object(at: indexPath)
let timestamp = event.timestamp
event.timestamp = timestamp // The idea is to simply update the Event entity.
}
启动应用程序(在 iOS 设备或模拟器中),并添加足够的行来填充视图(在 iPhone SE 中,它是 11 行)。 向下滚动视图,然后选择任意行。视图将迅速上下反弹。 这是一个错误,还是代码有问题?
【问题讨论】:
-
所以你的意思是如果你注释掉
didSelectRowAt中的声明,那么它就不会反弹?但似乎您在didSelectRowAt中没有与 beginUpdate() endUpdate() n 相关的代码 -
模板中没有
didSelectRowAt函数,我已经添加了它。是的,它会反弹。防止弹跳的唯一方法是删除controllerWillChangeContent()和controllerDidChangeContent()中的beginUpdates()和endUpdates(),但我会失去它们的功能。您是否尝试过重现代码? -
:还没试过,让我试试再回来
-
所以我猜线程已经死了......
标签: ios swift uitableview core-data nsfetchedresultscontroller