在 Swift 中将 NSIndexPath 转换为 NSInteger
Converting NSIndexPath to NSInteger in Swift
我有一个 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
时,它总是只是 returns 0.
您使用的不是同一个密钥
NSUserDefaults.standardUserDefaults().setObject(NSInteger(indexPath.row), forKey: "index") // <--- INDEX
NSUserDefaults.standardUserDefaults().integerForKey("event")) // <-- EVENT
还有你:
- 可能想用等效的方法保存/读取它
setInteger:forKey:
和 integerForKey:
- 不必转换值(它已经是一个整数);
保存一行(整数)值:
NSUserDefaults.standardUserDefaults().setInteger(indexPath.row, forKey: "row")
NSUserDefaults.standardUserDefaults().synchronize()
正在加载一行(整数)值:
row() -> Int
var row = NSUserDefaults.standardUserDefaults().integerForKey("row")
确保你不会把自己画在角落里。 NSIndexPath 包含 两个 个数字,而不是一个:一个部分和该部分中的一行。在 table 视图只有一个部分的琐碎情况下,部分编号将始终为零,但您会遇到更复杂的情况。
如果你想存储索引路径,我会向 NSUserDefaults 添加一个类别,其中一种方法将 NSIndexPath 转换为具有键部分和行的字典并写入,另一种方法读取字典并创建 NSIndexPath部分和行的值。
也就是说,行号是非常不合理的东西table。您的 UI 设计师决定必须更改两行的顺序,您的所有偏好都被破坏了。我所做的是一个枚举,用于标识每一行的用途;该枚举绝不能永远改变其值,并且存储在首选项中。然后还有另一个枚举,它引用 UI 中的项目,并且可以自由更改。
我有一个 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
时,它总是只是 returns 0.
您使用的不是同一个密钥
NSUserDefaults.standardUserDefaults().setObject(NSInteger(indexPath.row), forKey: "index") // <--- INDEX
NSUserDefaults.standardUserDefaults().integerForKey("event")) // <-- EVENT
还有你:
- 可能想用等效的方法保存/读取它
setInteger:forKey:
和integerForKey:
- 不必转换值(它已经是一个整数);
保存一行(整数)值:
NSUserDefaults.standardUserDefaults().setInteger(indexPath.row, forKey: "row")
NSUserDefaults.standardUserDefaults().synchronize()
正在加载一行(整数)值:
row() -> Int
var row = NSUserDefaults.standardUserDefaults().integerForKey("row")
确保你不会把自己画在角落里。 NSIndexPath 包含 两个 个数字,而不是一个:一个部分和该部分中的一行。在 table 视图只有一个部分的琐碎情况下,部分编号将始终为零,但您会遇到更复杂的情况。
如果你想存储索引路径,我会向 NSUserDefaults 添加一个类别,其中一种方法将 NSIndexPath 转换为具有键部分和行的字典并写入,另一种方法读取字典并创建 NSIndexPath部分和行的值。
也就是说,行号是非常不合理的东西table。您的 UI 设计师决定必须更改两行的顺序,您的所有偏好都被破坏了。我所做的是一个枚举,用于标识每一行的用途;该枚举绝不能永远改变其值,并且存储在首选项中。然后还有另一个枚举,它引用 UI 中的项目,并且可以自由更改。