ios - UserDefaults removeObjectForKey 不起作用?
问题描述
我一开始就在我的应用程序中设置了一些用户默认值。然后这些值可能会被用户覆盖,我想删除这些设置。
当我尝试删除所有默认值时,删除了一些键值,但没有立即删除一些键。当我杀死应用程序并再次返回应用程序时,它就像已删除一样工作。正如我所料,它应该在删除键后立即工作
这是我在 swift 3.2 中设置默认值的代码
let sharedUserDefaultsWithExtension = UserDefaults(suiteName: "GROUP_IDENTIFIER")
sharedUserDefaultsWithExtension?.setValue(newValue, forKey: "My_Key")
sharedUserDefaultsWithExtension?.synchronize()
删除所有用户默认值的代码
let sharedUserDefaultsWithExtension = UserDefaults(suiteName: "GROUP_IDENTIFIER")
for key in (sharedUserDefaultsWithExtension?.dictionaryRepresentation().keys)! {
sharedUserDefaultsWithExtension?.removeObject(forKey: key)
}
sharedUserDefaultsWithExtension?.synchronize()
任何想法?
解决方案
如果要从中删除所有数据,请userdefault
使用:
let bundleIdentifier = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: bundleIdentifier)
对于set
用户默认的数据:
UserDefaults.standard.setValue("jogendar", forKey: "My_Key")
并且以您的方式,您需要在删除后同步数据,但不要尝试
synchronize()
文档中提到的https://developer.apple.com/documentation/foundation/userdefaults/1414005-synchronize
synchronize()
:- 等待对默认数据库的任何挂起的异步更新并返回;这种方法是不必要的,不应该使用。
let sharedUserDefaultsWithExtension = UserDefaults(suiteName: "GROUP_IDENTIFIER")
for key in (sharedUserDefaultsWithExtension?.dictionaryRepresentation().keys)! {
sharedUserDefaultsWithExtension?.removeObject(forKey: key)
sharedUserDefaultsWithExtension?.synchronize()
}
推荐阅读
- kotlin - 访问 build.gradle.kt 值
- html - 打开 DevTools 会导致页面快速重新加载
- flutter - Dart:访问从泛型类继承的属性或方法
- php - PHP图像裁剪图像边界外给出黑条
- python - 如何在 PowerShell 中停用 virtualenv
- variables - 如何在 Cypher 中设置传出节点?
- macos - 如何在 macos x 应用程序中请求桌面文件夹权限
- amazon-web-services - AWS Glue 没有为 XML 标签创建表
- php - Cron 在 Laravel 中启动晚了几分钟
- tesseract - “不支持的图像对象”错误,使用 Tesseract (Mac)