【问题标题】:Strange behaviour with core data entity核心数据实体的奇怪行为
【发布时间】:2014-10-17 14:25:44
【问题描述】:

我有这部分代码

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let itemID:NSManagedObjectID = self.frc!.objectAtIndexPath(indexPath).objectID!
    let entity:Entity = self.frc?.managedObjectContext.existingObjectWithID(itemID, error: nil) as Entity

    if entity.completed {
        entity.completed = false
    } else {
        entity.completed = true
    }

    println(entity.completed)

}

当事件发生时tableView 执行滚动到顶部动画有什么想法吗?

【问题讨论】:

  • 问题出在这行代码entity.completed = false

标签: ios core-data swift


【解决方案1】:

您可能正在以某种方式更新您的托管对象数组(未显示),可能是通过一些委托方法。最有可能的是,您在某处调用tableView.reloadData() 来更新显示的数据。这会自动重新加载整个表格视图并将滚动到顶部。

相反,只需使用tableView.reloadRowsAtIndexPaths(rowAnimation:) 记录的here 更新有问题的单元格。

也许您的排序例程(未显示)正在按completed 属性排序。然后滚动可能是预期的行为。

注意:将 ID 数组保留为 dataSource 似乎很奇怪。由于 Core Data 的错误行为,只拥有一个对象数组同样有效。更好的是,您应该使用带有表格视图的NSFetchedResultsController - 您可以免费获得许多很酷的行为,并保证拥有最佳的性能和内存管理解决方案。

【讨论】:

  • 我认为这是一个 iOS 8 错误,当我使用具有行高的自我调整单元格时,一切正常
  • @Mundi: tableView.updateCellsForRowsAtIndexPaths() 听起来很有趣,但我找不到那个功能?
  • 对不起,应该是reload。已更正并链接到文档。
猜你喜欢
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多