iOS 10, NSUserDefaults Does Not Work

2019-01-11 22:56发布

问题:

I try to write/read values to/from [NSUserDefaults standardUserDefaults], but it seems not to work. My code is:

[[NSUserDefaults standardUserDefaults] setObject:@"sampleString" forKey:@"sampleKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSString *defaultsValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"sampleKey"];
return defaultsValue;

This code returns nil, for Xcode 8.0 beta and iPhone 6s (10.0) simulator. However it returns sampleString for Xcode 8.0 beta and iPhone 6s (9.1) simulator

I am testing my app with the new systems. Am I doing something wrong? Or is there a workaround for that? Or is it just a "beta" issue?

回答1:

I just had the same problem. There seems to be an issue with NSUserDefaults when first running the iOS8 or 9 simulator and then the iOS10 simulator. Rebooting the mac solved the issue for me.



回答2:

This was a bug with the iOS Simulator that shipped with Xcode 8 Beta 1. It has been fixed in Beta 2:

Resolved in Xcode 8 beta 2 – IDE

Simulator

  • NSUserDefaults function correctly in the iOS 10 Simulator, regardless of whether you have previously booted the iOS 8 or iOS 9 Simulator. (25974372)

Xcode 8 Beta 2 Release Notes

Update to Xcode 8 Beta 2 to avoid having to restart your host Mac every time.



回答3:

Update:

If data protection is enabled, synchronize may also fail when an application enter background.


We have this issue on a real device running iOS 10.1.1. Old value could be read, but new change cannot save to disk, synchronize method always fail.

Reboot the device may solve this issue.



回答4:

I just had the same problem. There seems to be an issue with NSUserDefaults when first running the iOS8 or 9 simulator and then the iOS10 simulator. Rebooting the mac solved the issue for me. shareeditflag Confirmed. Closing and reopening the simulator didn't work, but rebooting fixed it for me.

As per Apple (apple link ) WWDC Seed: Running multiple iOS simulators can cause NSUserDefaults to not work Running an iOS 8 or 9 simulator followed by an iOS 10 simulator will cause NSUserDefaults to stop working in the simulator. This can be worked around by rebooting the host Mac.