Iphone NSUserDefault为AppleWatch
我现在开车疯了,因为我找不到我的错误。 我试图将一些信息传递到我的WatchKit应用程序,但这对我来说不起作用 他们都在同一组 然后我从手表开始Iphone NSUserDefault为AppleWatch,iphone,swift,nsuserdefaults,watchkit,Iphone,Swift,Nsuserdefaults,Watchkit,我现在开车疯了,因为我找不到我的错误。 我试图将一些信息传递到我的WatchKit应用程序,但这对我来说不起作用 他们都在同一组 然后我从手表开始 NSUserDefaults(suiteName: "group.WatchDate") NSUserDefaults.standardUserDefaults().setObject("1", forKey: "TEST") NSUserDefaults.standardUserDefaults().synchronize() 在手表上启动应用
NSUserDefaults(suiteName: "group.WatchDate")
NSUserDefaults.standardUserDefaults().setObject("1", forKey: "TEST")
NSUserDefaults.standardUserDefaults().synchronize()
在手表上启动应用程序一次后,我切换到“手机应用程序”,让它打印存储的值
NSUserDefaults(suiteName: "group.WatchDate")
println("Saved Informations:")
println(NSUserDefaults.standardUserDefaults().objectForKey("TEST"))
输出总是“零”
我试着用另一种方式传递同样的信息,也没有成功。
但是,如果我只是在同一个“设备”上打印ln()存储值,它就会工作
知道我做错了什么吗?NSUserDefaults(suiteName)
已经返回了一个NSUserDefaults
对象,因此您不能再次调用它。试着这样做:
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)
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)
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)
}
}
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)
}
}
如果没有名为“group.WatchDate”的套件,代码将崩溃。尝试使用“如果让”@stk:不,由于
?
,代码没有崩溃。它只在对象不为空时执行。您是否实际运行了代码?我得到一个编译错误:在'as'之后应该是类型。
。没有as
要强制展开,只需省略?
。如果我强制展开它,则会出现运行时错误EXC_BAD_指令
Ah-您使用的是Swift 1.1(Xcode 6.2)。那么你是对的,如果没有名为“group.WatchDate”的套件,你必须更改语法并使用if let…
你的代码崩溃。尝试使用“如果让”@stk:不,由于?
,代码没有崩溃。它只在对象不为空时执行。您是否实际运行了代码?我得到一个编译错误:在'as'之后应该是类型。
。没有as
要强制展开,只需省略?
。如果我强制展开它,则会出现运行时错误EXC_BAD_指令
Ah-您使用的是Swift 1.1(Xcode 6.2)。那么您是对的,您必须更改语法并使用if let…