核心数据实体的奇怪行为

时间:2014-10-17 14:25:44

标签: ios core-data swift

我有这部分代码

    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会执行滚动到顶部动画的任何想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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