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

我有一个UITableView,其中的一个部分由NSFetchedResultsControllerpipe理。 它提取核心数据对象,并通过“order”属性对它们进行sorting:

  1. 对象1的顺序
  2. 对象与订单2
  3. 订单3的对象

我面对的要求是用户可以移动行。 移动后:

  1. 对象与订单2
  2. 对象1的顺序
  3. 订单3的对象

我需要做些什么来确保核心数据中的pipe理对象反映用户移动表视图行所产生的顺序变化? 当我使用GMGridView时,有一个交换两个对象的callback。 在这种情况下,改变他们的顺序工作,但我没有看到这样的function的UITableView。

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

你可以使用这个:

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

另外通过交换对象顺序来重新sorting数据源。

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

您可以在CoreData对象本身(添加另一个属性)或通过将获取的对象映射到它的行顺序(在NSUserDefaults或仅在NSDictionary )来维护关联。

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