NSUserDefaults 到 Apple Watch

NSUserDefaults to AppleWatch

我现在正在疯狂驾驶,因为我找不到我的错误。 我尝试将一些信息传递到我的 WatchKit 应用程序,但这对我不起作用。

两人同组

然后我从手表开始

NSUserDefaults(suiteName: "group.WatchDate")
NSUserDefaults.standardUserDefaults().setObject("1", forKey: "TEST")
NSUserDefaults.standardUserDefaults().synchronize()

在手表上启动应用程序后,我切换到 "phone app" 并让它 println() 存储值

NSUserDefaults(suiteName: "group.WatchDate")
println("Saved Informations:")
println(NSUserDefaults.standardUserDefaults().objectForKey("TEST"))

输出总是"nil"

我尝试用另一种方式传递相同的信息,但也没有成功。 但是,如果我只是简单地 println() 相同 "device" 上的存储值,它就可以工作。

知道我做错了什么吗?

NSUserDefaults(suiteName) 已经 returns 一个 NSUserDefaults 对象,所以你不能再对它调用 standardUserDefaults()。试试这样:

let sharedDefaults = NSUserDefaults(suiteName: "group.WatchDate")
sharedDefaults?.setObject("1", forKey: "TEST")
sharedDefaults?.synchronize()

另一边:

let sharedDefaults = NSUserDefaults(suiteName: "group.WatchDate")
let s = sharedDefaults?.objectForKey("TEST") as! String
println(s)

zisoft 的观点是正确的,但据我所知,我的代码是更安全、更简洁(更具可读性)的方法。我还考虑到,不使用反向 DNS 样式命名您的应用组不是最佳实践。

设置数据:

import Foundation

if let sharedDefaults = NSUserDefaults(suiteName: "group.com.mycompany.WatchDate") {
    sharedDefaults.setObject("1", forKey: "TEST")
    sharedDefaults.synchronize()
}

读取数据:

import Foundation

if let sharedDefaults = NSUserDefaults(suiteName: "group.com.mycompany.WatchDate") {
    if let sharedString = sharedDefaults.objectForKey("TEST") as? String {
        println(sharedString)
    }
}