这是来自终端的一个简单任务:

defaults delete -g <key>

我想在swift中使用NSUserDefaultsdocumentation表示:
如果要更改全局域中某个首选项的值,请使用新值将该首选项写入应用程序域。
这只是为应用程序域中的同一个键设置一个新值,以便将来当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)

主要问题是与其他进程或线程的竞争条件。如果在您读取全局域和写回全局域之间有更改,则可以撤消这些更改,即使这些更改不涉及您正在操作的密钥。而且,你可能在读和写一本大字典,做的工作比实际需要的多得多。
最好是使用CFPreferencesapi:
CFPreferencesSetValue(someKey, nil, kCFPreferencesAnyApplication,
                      kCFPreferencesCurrentUser, kCFPreferencesCurrentHost)

关于swift - 如何以编程方式从NSGlobalDomain删除首选项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36968167/

10-11 16:35