每次按下按钮时重置用户默认值(swift 4)
Posted
技术标签:
【中文标题】每次按下按钮时重置用户默认值(swift 4)【英文标题】:reset userdefualts every time button is pressed (swift4) 【发布时间】:2017-11-14 04:36:49 【问题描述】:我正在尝试使用 userdefualts 来保存标签上显示的元组。现在我的代码如下使用 userdefulats。如果 a, 2 则输入 a, 3。标签显示 a,2,a,2,a,3。标签只是附加每个新条目。我需要 userdefualt 覆盖刚刚保存的任何内容。所以它应该只显示 a,2 a,3。
@IBAction func submitText(_ sender: Any)
if let domain = Bundle.main.bundleIdentifier
UserDefaults.standard.removePersistentDomain(forName: domain)
llble.text = String(describing: result) + "\n"
UserDefaults.standard.set(llble.text, forKey: "name")
override func viewDidAppear(_ animated: Bool)
let save : String? = UserDefaults.standard.object(forKey: "name") as? String
if let nameToDisplay = save
llble.text = nameToDisplay
【问题讨论】:
你想从用户默认值中删除所有值还是只删除键“name”的值? 【参考方案1】:斯威夫特 4:
if let domain = Bundle.main.bundleIdentifier
UserDefaults.standard.removePersistentDomain(forName: domain)
斯威夫特 3:
if let domain = NSBundle.mainBundle().bundleIdentifier
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(
domain)
目标-C:
NSString *domain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName: domain];
调用此方法等效于使用 init(suiteName:)
传递 domainName 初始化用户默认对象,并在其每个键上调用 removeObject(forKey:)
方法。
另外,synchronize()
是一种遗留方法,没有必要也不应该使用。
【讨论】:
我是否将 if let domain = Bundle.main.bundleIdentifier UserDefaults.standard.removePersistentDomain(forName: domain) 放在按钮操作或 viewdidappear 中?谢谢。 如果你想让它可重用,你应该为此创建一个单独的服务/管理器。如果不是 - 只需在您的类中创建一个方法,例如“func clearUserDefaults”,并在点击按钮时调用它(无法想象为什么您实际上应该在 viewdidappear 中清除 userdefaults) 我刚刚在上面编辑了我的代码,但它产生了相同的结果,只是附加了之前的代码。【参考方案2】:您应该检查将字符串提供给用户默认值的结果变量的逻辑。
【讨论】:
【参考方案3】:您可以在 Swift 中使用以下方法。这将删除并删除所有可能的用户默认值。
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
UserDefaults.standard.synchronize()
【讨论】:
以上是关于每次按下按钮时重置用户默认值(swift 4)的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 按下按钮时,如果动画已经在播放,则将其重置为开始