我在保存和加载难度整数时遇到问题。我按下一个按钮来决定一个视图:
(这是一个难点)
Difficulty + 1
let SecondDefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
SecondDefaults.setObject(Difficulty, forKey: "Difficulty")
SecondDefaults.synchronize()
在viewDidLoad下的另一个视图中加载:
let SecondDefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
var difficulty = SecondDefaults.valueForKey("Difficulty")?.integerValue
SecondDefaults.synchronize()
Difficulty = difficulty!.stringByTrimmingCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet).toInt()!
答案 0 :(得分:0)
您需要更改:
var difficulty = SecondDefaults.valueForKey("Difficulty") as? String
到
var difficulty = SecondDefaults.valueForKey("Difficulty")?.stringValue
我不知道你为什么需要将整数转换为字符串。您只需要以下代码从NSUserDefaults获取整数,无需将其转换为字符串。
let SecondDefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
var difficulty = SecondDefaults.valueForKey("Difficulty")?.integerValue
答案 1 :(得分:0)
你的问题在于这一行:
var difficulty = SecondDefaults.valueForKey("Difficulty") as? String
问题是该值可能是String,也可能是nil。谁知道? as?
关键字表示强制转换可能会失败,因此难道是String可选,您可以隐式解包。你解开为nil的任何东西都会给你一个运行时错误。
假设您的第二个代码段中的Difficulty
属于Int
类型,这应该可行:
let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
let maybeDifficulty = defaults.valueForKey("Difficulty") as? Int
if let difficulty = maybeDifficulty {
Difficulty = difficulty
} else {
println("Difficulty is not an Int or may be nil")
}