这是来自终端的一个简单任务:
defaults delete -g <key>
我想在swift中使用
NSUserDefaults
。documentation表示:如果要更改全局域中某个首选项的值,请使用新值将该首选项写入应用程序域。
这只是为应用程序域中的同一个键设置一个新值,以便将来当
NSUserDefaults
检索该键的值时,它将在搜索全局域之前在应用程序域中找到新值。有没有办法:
从nsglobaldomain中删除密钥,或
为nsglobaldomain中的键设置新值
使用
NSUserDefaults
?例如,我知道可以使用nstask运行
defaults delete -g <key>
,但我认为这是一个解决方法(一个有效的方法)。 最佳答案
你可以试试,但这不是个好主意:
var defaults = NSUserDefaults.standardUserDefaults()
var globalDomain = defaults.persistentDomainForName(NSGlobalDomain)
globalDomain.removeObjectForKey(someKey)
defaults.setPersistentDomain(globalDomain, forName:NSGlobalDomain)
主要问题是与其他进程或线程的竞争条件。如果在您读取全局域和写回全局域之间有更改,则可以撤消这些更改,即使这些更改不涉及您正在操作的密钥。而且,你可能在读和写一本大字典,做的工作比实际需要的多得多。
最好是使用
CFPreferences
api:CFPreferencesSetValue(someKey, nil, kCFPreferencesAnyApplication,
kCFPreferencesCurrentUser, kCFPreferencesCurrentHost)
关于swift - 如何以编程方式从NSGlobalDomain删除首选项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36968167/