UserDefaults removeObjectForKey不起作用?

时间:2018-05-19 11:04:49

标签: ios swift nsuserdefaults userdefaults

我在开始时在我的应用中为用户默认设置了一些值。然后这些值可能会被用户覆盖,我想删除这些设置。

当我尝试删除所有默认值时,删除了一些键值但是没有立即删除几个键。当我杀了app&再次回到应用程序它工作删除。正如我所料,它应该在删除键后立即工作

这是我在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()

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

如果要删除userdefault中的所有数据,请使用:

let bundleIdentifier = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: bundleIdentifier)

对于set用户默认值中的数据:

UserDefaults.standard.setValue("jogendar", forKey: "My_Key")
  

以您的方式,您需要在删除后同步数据,但不要在文档https://developer.apple.com/documentation/foundation/userdefaults/1414005-synchronize

中提及synchronize()      
    

synchronize(): - 等待默认数据库的任何挂起的异步更新并返回;这种方法是不必要的,不应该使用。

  
let sharedUserDefaultsWithExtension = UserDefaults(suiteName: "GROUP_IDENTIFIER")
for key in (sharedUserDefaultsWithExtension?.dictionaryRepresentation().keys)! {
    sharedUserDefaultsWithExtension?.removeObject(forKey: key)
    sharedUserDefaultsWithExtension?.synchronize()
}