Swift - 在NSUserDefaults中保存单元格选择

时间:2015-03-17 19:10:24

标签: ios uitableview swift nsuserdefaults didselectrowatindexpath

目前,我有一个待办事项列表应用。选择行时,alpha会变暗,表示已选择任务或已完成"已完成"。我一直在这里大力搜索如何将选定的单元格状态保存到NSUserDefaults

我的ViewController

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var defaults = NSUserDefaults.standardUserDefaults()

@IBOutlet weak var toDoListTable: UITableView!


override func viewDidLoad() {
    super.viewDidLoad()

    if defaults.objectForKey("toDoList") != nil {

        toDoList = defaults.objectForKey("toDoList") as [String]

    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return toDoList.count

}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell

    return cell

}


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    var selectedCell = tableView.cellForRowAtIndexPath(indexPath)!
    selectedCell.contentView.alpha = 0.3



}

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {

    var deselectedCell = tableView.cellForRowAtIndexPath(indexPath)!
    deselectedCell.contentView.alpha = 1.0

}






func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

    if editingStyle == UITableViewCellEditingStyle.Delete {

        toDoList.removeAtIndex(indexPath.row)

        toDoListTable.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Left)

        defaults.setObject(toDoList, forKey: "toDoList")



    }

}


override func viewDidAppear(animated: Bool) {
    toDoListTable.reloadData()

}


}

我相信我只是在调用它/试图找出在哪里调用它时遇到问题。任何帮助将不胜感激。

编辑**我现在拥有的内容保存了UITextField

中存储的内容

3 个答案:

答案 0 :(得分:0)

问题是它没有保存吗?

您可以尝试calling synchronize立即保存磁盘以查看是否会产生影响,尽管不应该这样做。

NSUserDefaults.standardUserDefaults().setObject(indexPath.row, forKey: "selection")
NSUserDefaults.standardUserDefaults().synchronize()

答案 1 :(得分:0)

NSIndexPath的行/项属性是NSInteger。这不是一个对象。使用 改为setInteger(_:forKey :)。 @Van Du Tan对defaults.setValue(indexPath.row, forKey: "selection")的回答可能无效,因为您必须将行封装在NSValue对象中。

答案 2 :(得分:0)

首先,我假设您有一行声明NSUserDefaults:

let defaults = NSUserDefaults.standardUserDefaults()

我相信你要做的是存储相对于你选择的行的alpha(假设状态)。在这种情况下

let key = "myTableViewWithRowOf\(indexpath.row)"
defaults.setFloat(selectedCell.contentView.alpha, forKey: key)

然后,您可以使用floatForKey方法检索此数据。

理想情况下,您可能希望最终得到与您的tableView关联的NSArray,并使用defaults.setObject(...)进行存储。这样,当您的应用加载时,您可以调用整个数组并循环恢复"状态"。