【问题标题】:reset userdefualts every time button is pressed (swift4)每次按下按钮时重置用户默认值(swift 4)
【发布时间】: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”的值?

标签: ios button save nsuserdefaults swift4


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

    【讨论】:

      猜你喜欢
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2019-10-04
      • 2016-10-02
      • 1970-01-01
      相关资源
      最近更新 更多