Search code examples
swiftnsuserdefaultskeychain

How to remove UserDefaults data swift?


userdaeults does not delete the data in memory, although I do delete it. Keychain does the deletion. I share the code below. It calls the handlelogout function when exiting. The recording is fine, but when I exit, it does not delete the data that I have saved.

 @objc func deleteee(){
        do {
            try keychain.remove("chipnumbernew")
        } catch let error {
            print("error: \(error)")
        }


    }

    @objc func deleteeetimer(){

        UserDefaults.standard.removeObject(forKey: "timertext")
        UserDefaults.standard.removeObject(forKey: "timertext2")
        UserDefaults.standard.synchronize()

    }
 @objc func handleLogout(){

        do {
            deleteee()
            deleteeetimer()
            try Auth.auth().signOut()



            let mainTableVC = LoginViewController()

            let navController = UINavigationController(rootViewController: mainTableVC)

            self.present(navController, animated: true, completion: {

                //
            })

        } catch let signOutError as NSError {
            print ("Giriş Yapılamadı: %@", signOutError)
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        let token = try? keychain.getString("chipnumbernew")
        chip1InfoString = token

        if let strtimer = UserDefaults.standard.string(forKey: "timertext") {
            print("strtimer", strtimer)
          timertextNew.text = strtimer
        }

        if let strtimer2 = UserDefaults.standard.string(forKey: "timertext2") {
            print("strtimer2", strtimer2)
            timertext2New.text = strtimer2

        } }

Solution

  • The removeObject in UserDefaults itself will clear the value. You can verify that directly in the plist. Please see this post for accessing plist.

    Still, you want to clean up, you can try below code.

        if let appDomain = Bundle.main.bundleIdentifier {
            UserDefaults.standard.removePersistentDomain(forName: appDomain)
        }