保存UITableViewCells的顺序

时间:2015-08-31 22:53:32

标签: swift uitableview core-data ios8 nsfetchedresultscontroller

我在tableview中添加了选项来对单元格进行排序/重新排序。我使用了本教程:http://www.ioscreator.com/tutorials/reordering-rows-table-view-ios8-swift。现在我想问一下如何保存细胞的分类/顺序?我还使用Core Data和fetchedResultsController

1 个答案:

答案 0 :(得分:4)

向Core Data模型对象添加一个额外属性,用于存储排序顺序。例如,您可以拥有orderIndex属性:

class MyItem: NSManagedObject {

    @NSManaged var myOtherAttribute: String
    @NSManaged var orderIndex: Int32

}

然后,在排序描述符中使用此属性作为获取结果控制器的获取请求:

fetchRequest.sortDescriptors = [NSSortDescriptor(key: "orderIndex", ascending: true)]

最后,更新UITableViewDataSource方法中的orderIndex属性:

func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {

    if var items = fetchedResultsController.fetchedObjects as? [MyItem],
        let itemToMove = fetchedResultsController.objectAtIndexPath(sourceIndexPath) as? MyItem {

            items.removeAtIndex(sourceIndexPath.row)
            items.insert(itemToMove, atIndex: destinationIndexPath.row)

            for (index, item) in enumerate(items) {
                item.orderIndex = Int32(index)
            }
    }
}