使用 Core Data 重新排列 TableView 单元格的顺序

Posted

技术标签:

【中文标题】使用 Core Data 重新排列 TableView 单元格的顺序【英文标题】:Rearranging order of TableView cells using Core Data 【发布时间】:2015-07-05 21:47:07 【问题描述】:

我有一个自定义 UITableView 类来处理表格视图的动画,并且已经使用在表格视图中显示的Array 测试了以下代码。

tableView.didMoveCellFromIndexPathToIndexPathBlock = (fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) -> Void in

  self.objectsArray.exchangeObjectAtIndex(toIndexPath.row, withObjectAtIndex: fromIndexPath.row)


这适用于基本数组,但我实际上想重新排列 NSSet 类型的托管对象。因此,在我的文件中,我声明了以下内容,它创建了返回表视图使用的 Item 类型的数组。

文件夹类函数:

 func itemArray() -> [Item] 
    let sortDescriptor = NSSortDescriptor(key: "date", ascending: true)
    return iist.sortedArrayUsingDescriptors([sortDescriptor]) as! [Item]

表格视图控制器声明

var itemArray = [Item]()
    itemArray = folder.itemArray() //class function to return a NSArray of the NSSET [Item]

我正在尝试这样做,因此在重新排列单元格时它会更改 NSSet 的顺序,以便在应用程序重新加载时保存它,有人有什么建议吗?

【问题讨论】:

【参考方案1】:

根据定义,NSSet 没有顺序,因此没有本地方法可以让您保持 NSSet 的顺序。我不是说不可能,但你不能按照你的想法去做。

来自Apple's NSSet Documentation:

NSSet、NSMutableSet 和 NSCountedSet 类声明了到无序对象集合的编程接口。

您需要将 NSSet 转换为 NSMutableArray 并引用该数组而不是 NSSet。

【讨论】:

当您说将我的 NSSet 转换为 Mutable Array 时,您是指将我的类函数转换为 NSMutableArray 吗? 不,你不能只是投射它。您需要更改您的函数以使用 NSMutableArray 而不是 NSSet。您可能会使用 yourMutableArray = [mySet allObjects] 之类的东西初始化此数组,然后继续使用此数组进行排序 感谢您的帮助,我目前仍在处理您的建议,不幸的是遇到了问题,如果您想查看它,请发表不同的帖子。 ***.com/questions/31257572/…

以上是关于使用 Core Data 重新排列 TableView 单元格的顺序的主要内容,如果未能解决你的问题,请参考以下文章

持久化和重新排列 Core Data 记录的顺序

UICollectionview 在使用 Core Data 保存实体后重新加载数据

使用 Fetch Results Controller 对 Core Data 中的单元格重新排序

应用重新启动时数据不会在 Core Data 中持久化

如何通过删除和重新安装 App 将数据持久化在 Core Data 中

Core Data 默认使用线程吗?