UserDefaults is not saved with Swift UserDefaults is not saved with Swift swift swift

UserDefaults is not saved with Swift


I had the same problem and the issue was in the "didSet" block itself. I don't know why, but it does not work with userDefaults - it does not persist it properly and after killing the application all changes were gone.

Synchronize() does not help. I found out, this method is no longer necessary and it will be deprecated in future (this is comment in UserDefaults class):

-synchronize is deprecated and will be marked with the NS_DEPRECATED macro in a future release.

By trial and error I found out, that it works, if I call it from main thread:

public static var isOffline = UserDefaults.standard.bool(forKey: "isOffline") {    didSet {        print("Saving isOffline flag which is now \(isOffline)")        DispatchQueue.main.async {            UserDefaults.standard.set(isOffline, forKey: "isOffline")        }    }}

If anyone can explain, why it works on main thread and no other, I would be glad to hear it.


try to change

UserDefaults.standard.set(isOffline, forKey: "isOffline")

to

UserDefaults.standard.setValue(isOffline, forKey: "isOffline")

without the dispatch code


Do Like this,

public static var isOffline:Bool {    get {       return UserDefaults.standard.bool(forKey: "isOffline")    }    set(newValue) {        print("Saving isOffline flag which is now \(isOffline)")        UserDefaults.standard.set(newValue, forKey: "isOffline")        UserDefaults.standard.synchronize()    }}