我有一个UITableView
,其中有一个连接到视图控制器的segue。当用户点击一个单元格时,我希望将indexPath.row
传递给该视图控制器,这样我就可以根据点击的单元格更新视图中的内容。
我知道这样做的不同方法,但是我想将NSUserDefaults()
用于我的特定用途。问题是我不知道如何将indexPath.row
转换为整数以保存到NSUserDefaults()
。这就是我的尝试:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println(indexPath.row)
NSUserDefaults.standardUserDefaults().setObject(NSInteger(indexPath.row), forKey: "index")
self.performSegueWithIdentifier("event", sender: self)
}
第二视图控制器:
override func viewDidAppear(animated: Bool) {
println(NSUserDefaults.standardUserDefaults().integerForKey("event"))
}
目前,当我尝试在下一个视图控制器中打印出indexPath.row
时,它总是只返回0.
答案 0 :(得分:2)
您没有使用相同的密钥
NSUserDefaults.standardUserDefaults().setObject(NSInteger(indexPath.row), forKey: "index") // <--- INDEX
NSUserDefaults.standardUserDefaults().integerForKey("event")) // <-- EVENT
你也是:
setInteger:forKey:
答案 1 :(得分:1)
确保你不要在角落里画画。 NSIndexPath包含两个数字,而不是一个:该部分中的一个部分和一行。在一个简单的情况下,当一个表视图只有一个部分时,部分编号总是为零,但是你会得到更复杂的情况。
如果你想存储索引路径,我会在NSUserDefaults中添加一个类别,其中一个方法可以将NSIndexPath转换为带有键部分和行的字典并写入,并且可以读取字典并创建带有值的NSIndexPath对于部分和行。
那就是说,行号是非常不稳定的。您的UI设计人员决定两行必须更改其顺序,并且所有首选项都会被破坏。我所做的是一个枚举,确定每一行的目的;枚举必须永远不会改变它的值,并且存储在首选项中。然后有另一个枚举引用UI中的项目,并且可以自由地改变。
答案 2 :(得分:0)
保存行(整数)值:
NSUserDefaults.standardUserDefaults().setInteger(indexPath.row, forKey: "row")
NSUserDefaults.standardUserDefaults().synchronize()
加载行(整数)值:
row() -> Int
var row = NSUserDefaults.standardUserDefaults().integerForKey("row")