在Swift中将NSIndexPath转换为NSInteger

时间:2015-04-22 16:58:12

标签: ios swift segue nsindexpath nsinteger

我有一个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.

3 个答案:

答案 0 :(得分:2)

您没有使用相同的密钥

NSUserDefaults.standardUserDefaults().setObject(NSInteger(indexPath.row), forKey: "index") // <--- INDEX

NSUserDefaults.standardUserDefaults().integerForKey("event")) // <-- EVENT

你也是:

  • 可能希望使用等效方法[{1}}和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")