iPhone应用程序启动时无法从Watch中读取NSUserDefaults

时间:2015-02-24 18:24:37

标签: ios iphone swift apple-watch

我正在试图弄清楚当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.

2 个答案:

答案 0 :(得分:2)

您在代码中使用了不同的密钥名称:stateintstate

答案 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)
    }
}