目前,我有一个待办事项列表应用。选择行时,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
。
答案 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(...)
进行存储。这样,当您的应用加载时,您可以调用整个数组并循环恢复"状态"。