我有一个问题,我有一个coredata对象,用于填充UITableView。每个UITableViewCell都有一些我用作复选框的按钮,当用户按下其中一个文本框时,我想更新coredata并重新加载UITableView,这样我所有的数组都会更新以反映新数据。 / p>
考虑到这一点,我得出的结论是每次按下按钮时都会重新加载UITableView,因为其中一些UITableViews将包含数百行,每行包含两个可编辑的UIButtons。
所以我想也许我应该更新当前的数组,然后当视图退出或设备进入休眠时我可以更新coredata对象吗?我唯一不知道这是正确的事情还是可能的事情。
这就是这样一个问题的原因是,如果我将一个按钮从一个刻度线改为一个十字形,如果我滚动,然后返回按钮勾选或交叉回复到它的旧值。
我想知道处理这种情况的最佳方法,因为我之前从未做过这样的事情。
答案 0 :(得分:0)
您应该使用NSFetchedResultsController及其委托方法来填充UITableView。然后,当用户点击按钮时,您只需更新相应的Core Data实体,而不是单元格。然后NSFetchedResultsController将调用其委托方法,您只能更新用户进行更改的那个单元格。 此外,在cellForRowAtIndexPath中,您可以简单地对相应的CoreData实体进行fid,并使用其属性/属性来调整单元格的显示。 请记住,当tableView调用cellForRowAtIndexPath:时,必须始终使用一些数据(通常是NSArray)从中读取indexPath上的单元格要做什么。 这样,当fetchedResutsController调用其委托方法时,您只需在tableView上调用reloadCellAtIndexPath,然后tableView将再次调用cellForRowAtIndexPath。随着核心数据实体的更新,您调整该单元格显示的逻辑将使单元格看起来应该如此。重要的是,您只需调整单元格在cellForRowAtIndexPath中的显示方式,并将外观基于CoreData实体。在多个地方更改单元格的外观,您将遇到问题。