首页 > 解决方案 > 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()

任何想法?

标签: iosswiftnsuserdefaultsuserdefaults

解决方案


如果要从中删除所有数据,请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()
}

推荐阅读