Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSUserDefault为AppleWatch_Iphone_Swift_Nsuserdefaults_Watchkit - Fatal编程技术网

Iphone NSUserDefault为AppleWatch

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() 在手表上启动应用

我现在开车疯了,因为我找不到我的错误。 我试图将一些信息传递到我的WatchKit应用程序,但这对我来说不起作用

他们都在同一组

然后我从手表开始

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…