UserDefaults removeObjectForKey 不起作用?
Posted
技术标签:
【中文标题】UserDefaults removeObjectForKey 不起作用?【英文标题】:UserDefaults removeObjectForKey not working? 【发布时间】:2018-05-19 11:04:49 【问题描述】:我在一开始就在我的应用程序中设置了一些用户默认值。然后这些值可能会被用户覆盖,我想删除这些设置。
当我尝试删除所有默认值时,删除了一些键值,但没有立即删除一些键。当我杀死应用程序并再次返回应用程序时,它就像已删除一样工作。正如我所料,它应该在删除键后立即工作
这是我在 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】:如果您想删除 userdefault
中的所有数据,请使用:
let bundleIdentifier = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: bundleIdentifier)
对于set
,用户默认的数据:
UserDefaults.standard.setValue("jogendar", forKey: "My_Key")
按照您的方式,您需要在删除后同步数据,但不要尝试
synchronize()
,如 doc 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()
【讨论】:
.synchronize()
现在已过时,如文档中所述。应该使用 UserDefaults 从任何代码中删除它。
@Moritz:谢谢,是的,应该删除以上是关于UserDefaults removeObjectForKey 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 8:类型“UserDefaults”没有成员“标准”
UserDefaults - 使用 Xcode Simulator 时保存不一致
UserDefaults with Struct - TableView 不显示从 UserDefaults 保存的数据?