从设备完全卸载应用程序然后将其加载到调试器中后,我尝试在设置方法中使用 boolForKey 加载标志。应用程序第一次运行时,我期望 bool 不会存在,因为我刚刚重新安装了应用程序。我期望从文档中 boolForKey 将因此返回 NO。
我看到了相反的情况。boolForKey 返回 YES,这让我的初始用户设置变得很糟糕。知道为什么会发生这种情况或解决它的好方法吗?
BOOL stopAutoLogin = [[NSUserDefaults standardUserDefaults] boolForKey:@"StopAutoLogin"];
_userWantsAutoLogin = !stopAutoLogin;
Run Code Online (Sandbox Code Playgroud)
所以 stopAutoLogin 的结果是“YES”,这是完全出乎意料的。
陌生人和陌生人:当我调用 objectForKey:@"StopAutoLogin" 时,正如预期的那样,我得到一个 nil 对象。只是 boolForKey 返回错误值。所以我把代码改成这样:
// this is nil
NSObject *wrapper = [[NSUserDefaults standardUserDefaults] objectForKey:@"StopAutoLogin"];
// this is YES
BOOL stopAutoLogin = [[NSUserDefaults standardUserDefaults] boolForKey:@"StopAutoLogin"];
Run Code Online (Sandbox Code Playgroud)
您是否为密钥注册了默认值?
NSMutableDictionary *appDefaults = [NSMutableDictionary dictionaryWithCapacity:1];
[appDefaults setObject:@"NO" forKey:kReloadOnStartKey];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults registerDefaults:appDefaults];
Run Code Online (Sandbox Code Playgroud)
如果没有注册域,则使用指定的字典创建一个注册域,并将 NSRegistrationDomain 添加到搜索列表的末尾。
注册域的内容不会写入磁盘;每次应用程序启动时都需要调用此方法。您可以将 plist 文件放置在应用程序的 Resources 目录中,并使用从该文件中读取的内容调用 registerDefaults: 。
请参阅此链接了解更多信息。
| 归档时间: |
|
| 查看次数: |
2914 次 |
| 最近记录: |