如何保持UITableView的数据源顺序响应用户移动行?

时间:2013-04-21 15:21:29

标签: iphone ios objective-c ipad uitableview

我有一个UITableView,其中一个部分由NSFetchedResultsController管理。它获取核心数据对象并按“order”属性对其进行排序:

  1. 订单1的对象
  2. 订单为2的对象
  3. 订单3的对象
  4. 我面临的要求是用户可以移动行。搬家后:

    1. 订单为2的对象
    2. 订单1的对象
    3. 订单3的对象
    4. 我需要做些什么才能确保核心数据中的托管对象反映用户移动表格视图行的顺序变化?当我使用GMGridView时,有一个回调交换两个对象。在这种情况下,改变他们的顺序是有效的,但我没有看到UITableView的这种功能。

      我是否需要手动更改已移动行下方所有对象的订单属性?

3 个答案:

答案 0 :(得分:1)

您可以使用:

    - (NSIndexPath *)            tableView:(UITableView *)tableView 
  targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath 
                       toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath

通过交换对象顺序,重新订购数据源。

答案 1 :(得分:1)

您需要在获取的对象和“行顺序”之间存储关联。您可以根据行顺序对行进行排序;行顺序默认为“订单”属性。当用户移动一行时,您也会更新“行顺序”。

您可以在CoreData对象本身(添加其他属性)中维护关联,也可以将获取的对象映射到其行顺序(NSUserDefaults或仅NSDictionary)。

答案 2 :(得分:1)

移动行不仅会影响自身的order属性,还会影响其后面的所有行。我找到的解决方法是将获取请求对象复制到nsmutablearray,然后在此数组中移动对象。然后运行for循环并更新每个对象中的order属性,然后保存托管对象上下文。然后重新加载uitableview。这似乎很多工作,但目前在获取请求中移动对象不像插入和删除那样自动。我希望这有帮助!