I may be misusing NSUserDefaults. I want to store the name of a background music file, which may be nil if the user doesn’t want to hear anything. For the time being, I have only two settings for my variable “currentBackgroundMusicFileName”: either a file that I distribute with the app, or nil.
When the app starts up, we call NSUserDefaults.standard.register( [ “bgm” : <myfilename> ) to default to the real file name, so the user will hear music on first run. Then I call NSUserDefaults.standard.object( forKey: “bgm” ) as? String to read the current setting. When I run the app, I go into my settings and select “None” as the background music file I want to hear, and the variable gets changed and we call NSUserDefaults.standard.set( nil, forKey: “bgm” ). The music is silenced. But when I kill the app and start again, the music comes back. Is it it a mistake to try using nil as an object value? Perhaps object( forKey: ) is meant to return the registered default value again instead of the nil when I reload the app, making it impossible for me to use nil as a valid value? It will be funny if, for a purpose like this, one must define an additional value that means “none”—exactly the thing Optionals were supposed to prevent—but not surprising. OTOH, maybe there’s something I’m supposed to do after setting a value to tell NSUserDefaults I really, really mean for it to save the changed value? -- Charles _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com