2014-10-17 187 views
0

奇怪行为我的代码与核心数据实体

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

+0

问题是这行代码'entity.completed = false' – sger 2014-10-17 14:29:06

回答

1

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

相反,只需更新tableView.reloadRowsAtIndexPaths(rowAnimation:)所记录的单元here即可。

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

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

+0

我认为它是一个iOS 8的错误它发生在我使用自行调整大小的单元格的高度为行时,一切正常 – sger 2014-10-17 15:49:21

+0

@Mundi:'tableView .updateCellsForRowsAtIndexPaths()'听起来很有趣,但我找不到那个函数? – zisoft 2014-10-17 17:23:55

+1

对不起,应该是'reload'。更正并链接到文档。 – Mundi 2014-10-18 08:18:15