代码之家  ›  专栏  ›  技术社区  ›  MahatmaManic

NSUserDefaults boolforky的意外结果

  •  4
  • MahatmaManic  · 技术社区  · 15 年前

    在从设备上完全卸载应用程序,然后将其加载到调试器中之后,我尝试在安装方法中使用boolForKey加载一个标志。应用程序第一次运行时,我期望bool不会存在,因为我刚刚重新安装了应用程序。我希望从文件,boolforky将因此返回NO。

    不过,我看到了相反的情况。boolForKey正在返回YES,这将禁用我的初始用户设置。你知道为什么会这样吗?或者是个好办法?

    BOOL stopAutoLogin = [[NSUserDefaults standardUserDefaults] boolForKey:@"StopAutoLogin"];
    _userWantsAutoLogin = !stopAutoLogin;
    

    所以stopAutoLogin的回答是“是”,这完全出乎意料。

    陌生人和陌生人:当我调用objectForKey:@“StopAutoLogin”时,我得到了一个nil对象,正如预期的那样。只是boolForKey返回了一个错误的值。所以我把代码改成:

    // this is nil
    NSObject *wrapper = [[NSUserDefaults standardUserDefaults] objectForKey:@"StopAutoLogin"];
    
    // this is YES
    BOOL stopAutoLogin = [[NSUserDefaults standardUserDefaults] boolForKey:@"StopAutoLogin"];
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   zh.chenghaojun    14 年前

    请尝试[用户默认同步];

    由于此方法是定期自动调用的,因此仅当您无法等待自动同步(例如,如果您的应用程序即将退出)或即使未做任何更改也要将用户默认值更新为磁盘上的值时,才使用此方法。

    请看: http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html

        2
  •  0
  •   AlexVogel    15 年前

    您是否注册了密钥的默认值?

    NSMutableDictionary *appDefaults = [NSMutableDictionary dictionaryWithCapacity:1];
    [appDefaults setObject:@"NO" forKey:kReloadOnStartKey];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults registerDefaults:appDefaults];
    

    一个是使用指定的 列表。

    登记的内容 域未写入磁盘;你 应用程序启动。你可以放置 应用程序中的plist文件 registerDefaults:包含内容

    看到这个了吗 link