2015-02-24 79 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

相关问题