简体   繁体   English

在Xcode 6.1(Swift)中将NSUserDefaults与suiteName一起使用时出现问题

[英]Trouble using NSUserDefaults with suiteName in Xcode 6.1 (Swift)

I'm having trouble using NSUserDefaults with suiteName in Xcode 6.1. 我在Xcode 6.1 NSUserDefaultssuiteName一起使用时遇到麻烦。 This code worked previously, but now there is a Swift Compiler Error. 这段代码以前可以运行,但是现在出现了Swift编译器错误。

var userDefaults = NSUserDefaults(suiteName: "group.com.example.myAppGroup")
userDefaults.setObject("test", forKey: "test")

Swift Compiler Error: NSUserDefaults? does not have a member named 'setObject' Swift编译器错误: NSUserDefaults? does not have a member named 'setObject' NSUserDefaults? does not have a member named 'setObject'

When using standardUserDefaults() , it works as expected: 使用standardUserDefaults() ,它可以按预期工作:

var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject("test", forKey: "test")

I'm not sure what I'm doing wrong when using suiteName . 我不确定使用suiteName时我做错了什么。

That's because NSUserDefaults(suiteName:) returns an optional, as it says in the error message. 这是因为NSUserDefaults(suiteName:)返回一个可选,如错误消息中所述。 So to fix, either you set your object this way: 因此,要解决此问题,可以通过以下方式设置对象:

userDefaults?.setObject("test", forKey: "test") // note the ? mark

or extract the value immediately from the initializer: 或立即从初始化程序中提取值:

var userDefaults = NSUserDefaults(suiteName: "group.com.example.myAppGroup")! // note the ! mark

NSUserDefaults(suiteName:) returns an optional NSUserDefaults . NSUserDefaults(suiteName:)返回一个可选的NSUserDefaults You should use optional binding to make sure it's valid and unwrap it before using it: 您应该使用可选绑定来确保其有效,并在使用前将其拆开:

if let userDefaults = NSUserDefaults(suiteName: "group.com.example.myAppGroup") {
    userDefaults.setObject("test", forKey: "test")
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM