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

Posted

技术标签:

【中文标题】使用 NSCoding 保存 TableView 单元格的重新排序【英文标题】:Saving reorder of TableView cells using NSCoding 【发布时间】:2016-02-01 19:08:59 【问题描述】:

我正在使用Xcode7Swift2 处理一个ios 项目。我有一个TableView,它从NSCoding 获取array。我已经启动它,以便用户可以在TableView 中重新排序TableViewCells。但是,一旦用户完成并单击“完成”,即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】:

我认为对我来说最好的方法是在重新排序完成后将 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()


【讨论】:

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

如何使用 NSCoding 保存结构

使用 NSCoding 保存结构的 Helperclass

使用 NSCoding Swift 保存对象时出现异常

无法通过 NSCoding 保存表数据

保存 PFObject NSCoding

NSCoding 游戏数据未快速保存