这是终端的一项简单任务:
defaults delete -g <key>
我想使用NSUserDefaults
在Swift中执行此操作。 documentation说:
如果要更改全局域中首选项的值,请使用新值将相同的首选项写入应用程序域。
这只是为应用程序域中的相同密钥设置一个新值,以便当NSUserDefaults
在将来检索密钥的值时,它将在应用程序域在搜索全局域之前。
有没有办法:
使用NSUserDefaults
?
我知道我可以使用NSTask来运行defaults delete -g <key>
,但我认为这是一种解决方法(有效的)。
答案 0 :(得分:3)
你可以试试这个,但这不是一个好主意:
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)