I set up multiple NSUserDefaults in my app that work for the most part. The NSUserDefaults are called from one ViewController and implemented at another (such as in a game with a level select). This seems to work well, until the user presses the back button on the level select screen. When they try to go back to the level select viewController, the NSUserDefaults are not loaded onto the screen.
Here is my code:

You need to call [userDefaults synchronize] after setting a value for a key. The automatic synchronization happens quite rarely, so in this case, while one completes a level, the sync won't have yet happened.