使用 NSCoding 保存 TableView 单元格的重新排序
Posted
技术标签:
【中文标题】使用 NSCoding 保存 TableView 单元格的重新排序【英文标题】:Saving reorder of TableView cells using NSCoding 【发布时间】:2016-02-01 19:08:59 【问题描述】:我正在使用Xcode7
和Swift2
处理一个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 单元格的重新排序的主要内容,如果未能解决你的问题,请参考以下文章