3

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

  1. 订单为 1 的对象
  2. 订单为 2 的对象
  3. 订单为 3 的对象

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

  1. 订单为 2 的对象
  2. 订单为 1 的对象
  3. 订单为 3 的对象

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

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

4

3 回答 3

1

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

于 2013-04-23T00:56:56.357 回答
1

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

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

于 2013-04-21T15:43:48.097 回答
1

你可以使用这个:

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

加上通过交换对象顺序重新排序您的数据源。

于 2013-04-21T15:24:23.960 回答