【问题标题】:Unexpected results from NSUserDefaults boolForKey来自 NSUserDefaults boolForKey 的意外结果
【发布时间】:2010-10-07 21:29:48
【问题描述】:

从设备上完全卸载应用程序,然后将其加载到调试器中后,我尝试在设置方法中使用 boolForKey 加载标志。该应用程序第一次运行时,我预计布尔值将不存在,因为我刚刚重新安装了该应用程序。我希望从文档中 boolForKey 将因此返回 NO。

我看到相反的情况。 boolForKey 返回 YES,这会影响我的初始用户设置。知道为什么会发生这种情况或解决它的好方法吗?

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

所以 stopAutoLogin 显示为“YES”,这完全出乎意料。

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

// this is nil
NSObject *wrapper = [[NSUserDefaults standardUserDefaults] objectForKey:@"StopAutoLogin"];

// this is YES
BOOL stopAutoLogin = [[NSUserDefaults standardUserDefaults] boolForKey:@"StopAutoLogin"];

【问题讨论】:

  • 你能发布你的代码吗?
  • 同意 Rits。另外:当您说“设备”时,您是指手机还是模拟器?不要像在手机上那样“删除应用程序”,而是转到菜单并选择“重置内容和设置...”。
  • 我的意思是在电话上。我删除了应用程序,确保它从任务栏中消失,然后使用 Xcode 调试器电缆加载它。
  • 您是否尝试过像 phooze 建议的那样“重置内容和设置”?当然,在读出值之前,请仔细检查您实际上并没有将 StopAutoLogin 设置为 YES。
  • 我认为重置内容和设置适用于模拟器,对吗?该设备是否有类似物?是的,我到处检查密钥并在提到它的地方设置断点,但无济于事。

标签: iphone


【解决方案1】:

请尝试 [UserDefaults 同步];

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

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

【讨论】:

    【解决方案2】:

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

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

    如果没有注册域, 一个是使用指定的 字典和 NSRegistrationDomain 被添加到搜索的末尾 列表。

    报名内容 域未写入磁盘;你 每次都需要调用这个方法 您的应用程序启动。你可以放置 应用程序中的 plist 文件 资源目录和调用 registerDefaults:包含内容 您从该文件中读取的内容。

    请参阅此link 了解更多信息。

    【讨论】:

    • 我没有这样做,但是您粘贴的同一个链接声称当密钥不存在时 boolForKey 应该返回 NO。鉴于文档,以及 objectForKey 返回 nil 的事实,为什么 boolForKey 会返回 YES?
    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多