user3496076
user3496076

Reputation:

Trouble using NSUserDefaults with suiteName in Xcode 6.1 (Swift)

I'm having trouble using NSUserDefaults with suiteName in Xcode 6.1. This code worked previously, but now there is a Swift Compiler Error.

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

Swift Compiler Error: NSUserDefaults? does not have a member named 'setObject'

When using standardUserDefaults(), it works as expected:

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

I'm not sure what I'm doing wrong when using suiteName.

Upvotes: 0

Views: 620

Answers (2)

Mike S
Mike S

Reputation: 42335

NSUserDefaults(suiteName:) returns an optional 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")
}

Upvotes: 0

John Estropia
John Estropia

Reputation: 17500

That's because NSUserDefaults(suiteName:) returns an optional, as it says in the error message. 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

Upvotes: 0

Related Questions