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

标签 ios iphone objective-c settings nsuserdefaults

我根据这个 Apple documentation page 使用默认设置制作了自定义 plist 并借助这个answer on question在 SO。

这是我的应用委托(delegate)代码:

- (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 设置我的 outlets 和 store 到 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"];
}

看起来不错,但 socket 没有设置为我在属性列表本身中设置的默认值。 我也无法通过 IBAction 方法更改此值

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

我做错了什么?

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

最佳答案

你忘记在更改 NSUserDefaults 中的内容后写这个

[defaults synchronize];

关于ios - 在 NSUserDefaults 中设置默认设置。我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22074501/

相关文章:

iphone - 根据按钮的突出显示状态更改标签文本颜色

ios - 具有已定义属性值的核心数据对象的数量

iphone - 在搜索结果中找不到我的 iPhone 应用程序

iphone - NSFetchedResultsController.sortDescriptor 按 KeyPath

ios - Gamecenter init/authentication 使 SpriteKit 的 Sprite 移动滞后

ios - 第一次应用程序 Xcode 10 和 iOS 未运行

iphone - 以编程方式设置文本时阻止 UITextView 跳转

objective-c - NSPipe 输入来 self 无法控制的进程

ios - 如何使用当前语言环境查找 NSString 中的数字范围?

objective-c - 为什么在 objective-c 的静态上下文中允许 self