使用NSCoding保存TableView单元格的重新排序

时间:2016-02-01 19:09:00

标签: swift2 tableview tableviewcell nscoding

我有一个iOS项目,我正致力于使用Xcode7Swift2。我有TableViewarray获取NSCoding。我启动了它,因此用户可以重新排序TableViewCells中的TableView。但是,一旦用户完成并点击“完成”,我就需要它来保存新订单。这是一个UIBarButtonItem。我的NSCoding object中有一个名为cellOrder的值。我看了here并看到CoreData。我如何为NSCoding执行此操作以及在何处保存它?

我为TableViewCell运动启动了以下代码:

func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    return true}


func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {

    let itemToMove = details[fromIndexPath.row]

    details.removeAtIndex(fromIndexPath.row)

    details.insert(itemToMove, atIndex: toIndexPath.row)

}

details是我的数据保存在的数组,使用NSCoding

1 个答案:

答案 0 :(得分:0)

我认为对我来说最好的方法是在重新排序完成后将details array保存到NSUserDefaults。我看到here如何将NSObject转换为NSData进行保存。我的moveRowAtIndexPath部分的代码现在是:

func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {

    let itemToMove = details[fromIndexPath.row]

    details.removeAtIndex(fromIndexPath.row)

    details.insert(itemToMove, atIndex: toIndexPath.row)

    // Archive NSObject and save as NSData
    let myData = NSKeyedArchiver.archivedDataWithRootObject(details)

    // NSUserDefaults Save for Reorder of cells
    reportDefaults.setObject(myData, forKey: "savedReportListKEY")
    reportDefaults.synchronize()

    // NSCoding Save
    saveReport()

}