我目前正在疯狂,因为我无法找到错误。 我尝试将一些信息传递给我的WatchKit应用程序,但这对我不起作用。
两者都属于同一组
然后我从Watch with
开始NSUserDefaults(suiteName: "group.WatchDate")
NSUserDefaults.standardUserDefaults().setObject("1", forKey: "TEST")
NSUserDefaults.standardUserDefaults().synchronize()
在手表上启动应用程序后,我切换到"手机应用程序"并让它println()存储的值
NSUserDefaults(suiteName: "group.WatchDate")
println("Saved Informations:")
println(NSUserDefaults.standardUserDefaults().objectForKey("TEST"))
输出始终为" nil"
我用另一种方式尝试了相同的传递信息,也没有成功。 但是,如果我只是println()存储的值在同一"设备"它有效。
知道我做错了吗?
答案 0 :(得分:3)
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)
}
}
答案 1 :(得分:2)
NSUserDefaults(suiteName)
已经返回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)