我正在试图弄清楚当iPhone应用程序启动时Watch的状态。
手表上有3个按钮。按下按钮时,将运行以下代码:
if let watchDefaults = NSUserDefaults(suiteName: "group.mywatchkit") {
watchDefaults.setInteger(1, forKey: "intstate")
watchDefaults.synchronize()
}
然后当应用程序启动时,在 viewDidLoad()方法中我尝试检索状态:
if let watchDefaults = NSUserDefaults(suiteName: "group.mywatchkit"){
let currentState = watchDefaults.integerForKey("intstate")
if currentState != 0 {
stateLabel.text = currentState.description
switch currentState {
case 1:
//do what state 1 needs
println("current state is \(currentState)")
case 2:
//do what state 2 needs
println("current state is \(currentState)")
case 3:
//do what state 3 needs
println("current state is \(currentState)")
default:
println("default state")
}
} else {
watchDefaults.setInteger(3, forKey: "intstate")
stateLabel.text = "current state is 3"
}
}
可悲的是我总是得到字符串“???”我错过了一些基本的东西吗?
因为如果没有值,它返回0,因为它永远不会是零。所以你只需要检查它是否等于0.
答案 0 :(得分:2)
您在代码中使用了不同的密钥名称:state
和intstate
答案 1 :(得分:1)
您应该使用名为stringForKey()的NSUserDefaults方法来加载您的字符串。只需使用您用于suitName的相同方法(如果允许)安全地解开该键的String。试试这样:
if let watchDefaults = NSUserDefaults(suiteName: "group.mywatchkit") {
watchDefaults.setObject("buttonX", forKey: "state")
}
if let watchDefaults = NSUserDefaults(suiteName: "group.mywatchkit"){
if let currentState = watchDefaults.stringForKey("state") {
println(currentState) // "buttonX"
}
else {
println(false)
}
}