2015-02-24 77 views
2

我試圖弄清iPhone在啓動iPhone應用程序時的狀態。當iPhone應用程序啓動時無法從Watch觀看NSUserDefaults

在手錶上,有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.

回答

1

你應該使用名爲stringForKey()的NSUserDefaults方法來加載你的字符串。只需使用與suitName相同的方法(如果讓)來安全地打開該密鑰的字符串。試試這樣:

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) 
    } 
} 
+0

謝謝!這與將objectForKey更改爲stringForKey一樣簡單。 – lernerbot 2015-02-24 18:58:07

+0

非常感謝您的支持! – lernerbot 2015-02-24 19:19:37

+0

不客氣 – 2015-02-24 19:19:57

2

你在你的代碼中使用不同的鍵名:stateintstate

+0

我很好奇如果這實際上是這裏的問題。 – 2015-02-26 15:13:07

+0

謝謝,我解決了 – lernerbot 2015-02-27 00:06:30

相關問題