是 - [NSUserDefaults registerDefaults:]添加剂并覆盖值吗?

时间:2015-03-10 21:14:24

标签: objective-c nsdictionary nsuserdefaults

换句话说,我必须只在我的应用中的一个位置呼叫registerDefaults(例如,当它启动时),或者我可以根据需要注册默认值吗?

如果它是附加的,当我尝试覆盖一个值时会发生什么?

例如,给出以下代码......

[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"a": @1}];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"b": @2}];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"b": @3}];

...最终的默认词典是什么?

  1. @{@"b": @3}(替换)
  2. @{@"a": @1, @"b": @3}(添加,覆盖值)
  3. @{@"a": @1, @"b": @2}(添加,不要覆盖值)
  4. 崩溃,因为@" b"已定义。

1 个答案:

答案 0 :(得分:3)

  1. 添加覆盖值。
  2. 示例:

    [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"a": @1}];
    [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"b": @2}];
    [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"b": @3}];
    NSAssert([[NSUserDefaults standardUserDefaults] integerForKey:@"a"] == 1, @"");
    NSAssert([[NSUserDefaults standardUserDefaults] integerForKey:@"b"] == 3, @"");
    

    终极词典是:

    @{@"a": @1, @"b": @3}
    

    因此,您可以根据需要多次调用它。

    来自documentation

      

    将指定字典的内容添加到注册域。