移动UITableView单元并维护一致的数据

时间:2010-04-15 21:35:37

标签: iphone cocoa-touch core-data uitableview

我已启用编辑模式并移动单元格,以允许用户按照他们喜欢的顺序定位表格视图内容。我使用Core Data作为数据源,它通过属性“userOrder”对内容进行排序。首次插入内容时,userOrder将设置为随机值。这个想法是当用户移动一个单元格时,该单元格的userOrder会改变以适应其新位置。以下是我在尝试实现此目标时遇到的问题:

  1. 成功保存单元格的新位置并调整受影响单元格的所有更改位置。

  2. 使数据保持一致。例如,TableView可以很好地处理运动,但是当我单击单元格的新位置时,它会显示以前是该位置的旧单元格的数据。所有受影响细胞的数据也都搞砸了。

  3. 我知道我必须在以下方面实现:

    - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {}
    

    我只是不知道如何。如果您使用Core Data,那么apple docs并不是特别有用,就像我的情况一样。

    非常感谢任何指导!

1 个答案:

答案 0 :(得分:0)

问题1几乎与使用CoreData无关,只需考虑一个简单的数组:

 {0 1 2 3 4 A}. 

现在用户在数组中移动一些新添加的元素A:

 {0 1 A 2 3 4}

因此,从接收索引2的插入元素A开始,所有元素都需要将其索引(在您的情况下为userOrder)递增1。 所以你映射0-> 0,1-> 1,A-> 2,2-> 3,3-> 4等等。

问题2可能有两个或三个来源:

  1. 您的CoreData值未同步,因此数据库与您看到的内容不同步。
  2. [table reloadData]未被调用
  3. 您的移动 - 算法错误
  4. 所以也许你可以查看上面的要点,如果没有,你可以考虑发布你的移动算法进行仔细检查。