如何保持UITableView的数据源响应用户移动行的顺序?
我有一个UITableView,其中的一个部分由NSFetchedResultsControllerpipe理。 它提取核心数据对象,并通过“order”属性对它们进行sorting:
- 对象1的顺序
- 对象与订单2
- 订单3的对象
我面对的要求是用户可以移动行。 移动后:
- 对象与订单2
- 对象1的顺序
- 订单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。 这看起来像很多工作,但目前在一个提取请求中移动对象不像插入和删除自动。 我希望这有帮助!