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() }}