在NSUserDefaults中设置默认设置。我做错了什么?

时间:2014-02-27 16:28:52

标签: ios iphone objective-c settings nsuserdefaults

我根据此Apple documentation page制作了默认设置的自定义plist  在SO的这个answer on question的帮助下。

这是我的app代理代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   NSString *defaultPrefsFile = [[NSBundle mainBundle] pathForResource:@"defaultSettings" ofType:@"plist"];
   NSDictionary *defaultPreferences = [NSDictionary dictionaryWithContentsOfFile:defaultPrefsFile];
   [[NSUserDefaults standardUserDefaults] registerDefaults:defaultPreferences];

   // Override point for customization after application launch.
   return YES;
}

我还制作了名为defaultSettings .plist的plist,并在此处存储我的默认设置。

这是结构:

<dict>
    <key>Sound</key>
    <true/>
    <key>Music</key>
    <true/>
    <key>Difficulty</key>
    <integer>0</integer>
</dict>

在我的设置VC中,我设置了plist我的outlet并在值发生变化时存储到plist。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.


    self.soundSwitcher.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"Sound"];

    ....  

    self.difficultySelector.selectedSegmentIndex = [[NSUserDefaults standardUserDefaults] integerForKey:@"Difficulty"];
}

看起来没问题但是出口没有设置为我在属性列表中设置的默认值。 我也不能通过IBAction方法

更改此值
- (IBAction)switchSound:(UISwitch *)sender
{
    [[NSUserDefaults standardUserDefaults] setBool:sender.isOn forKey:@"Sound"];
}

我做错了什么?

编辑: 我想提一下,如果我关闭设置View Controller然后再次打开它,设置会在我离开时保存。 (所以,事实上所有的工作)。但如果我重新启动我的应用程序,则所有设置都将被取消设置。

1 个答案:

答案 0 :(得分:2)

在NSUserDefaults

中更改内容之后,您忘了写这个
[defaults synchronize];
相关问题