每次按下按钮时重置用户默认值(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 - 按下按钮时,如果动画已经在播放,则将其重置为开始

如何保持 UIButton 的图像颜色不会重置为默认值?

WPF 自定义控件将文本框文本重置为默认值

表视图数据未在 Alamofire 发布请求调用 swift 3 中显示

每次关闭时如何重置视图?

文本字段值已更新并保存,但当再次加载表单并单击按钮时,字段会重置为默认值