NSUserDefaults不加载我想要的数字

柠檬雷声

我正在尝试使用NSUserDefaults在应用程序关闭后保存两个变量。一个是firstBoot,另一个是showAgain。为错误的代码做准备-

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSUserDefaults *defaults1 = [NSUserDefaults standardUserDefaults]; //Here is where it is supposed to be loading the firstBoot variable to check whether or not it is the first boot
    NSInteger boot = [defaults1 integerForKey:@"firstBoot"];
    firstBoot = boot; //Sort of pointless variable swapping

    if (firstBoot == 0) //Detects if isn't first boot, checks whether or not showAgain is yes or no (1=yes, 0=no)
    {
        NSUserDefaults *defaults1 = [NSUserDefaults standardUserDefaults];
        NSInteger boot = [defaults1 integerForKey:@"firstBoot"];
        NSUserDefaults *defaults2 = [NSUserDefaults standardUserDefaults];
        NSInteger show = [defaults2 integerForKey:@"showAgain"];
        firstBoot = boot; //More var swapping
        showAgain = show; //^^
    }
    else
    {
        firstBoot = 1; //If it is the first boot, or the variable wasn't 0, it sets them both to 1.
        showAgain = 1;
    }
    if ((firstBoot == 1) || (showAgain == 1)) //Checks if its the firstBoot or showAgain is set to yes
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Check the 'About' tab for help!" //Displays alert
                                                message:@""
                                               delegate:self
                                      cancelButtonTitle:@"Don't show again"
                                      otherButtonTitles:@"OK", nil];
        [alert show];
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"firstboot and showagain != 1" //Displays alert if it isn't the first boot, or isn't 1 and showAgain isn't set to yes(1).
                                                    message:@""
                                                   delegate:self
                                          cancelButtonTitle:@"wrong"
                                          otherButtonTitles:@"OK", nil];
        [alert show];
    }
}

警报-

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == [alertView cancelButtonIndex]) 
    {
        showAgain = 0; //If user clicks "Don't show again", set showAgain to off(0) and tell it it isn't the first boot anymore
        firstBoot = 0;

        NSUserDefaults *defaults1 = [NSUserDefaults standardUserDefaults];
        [defaults1 setInteger:0 forKey:@"firstBoot"]; //Hopefully stores firstBoot as 0
        [defaults1 synchronize];

        NSUserDefaults *defaults2 = [NSUserDefaults standardUserDefaults];
        [defaults2 setInteger:0 forKey:@"showAgain"]; //Again storing showAgain as 0
        [defaults2 synchronize];
    }
}

第一个警报应该在您第一次运行应用程序时弹出,而第二个警报是调试器占位符,并且应该在第一次运行后每次运行。对我来说,第二个首先运行,告诉我firstBoot和showAgain!= 1。

马蒂亚斯·鲍赫(Matthias Bauch)

NSInteger boot = [defaults1 integerForKey:@"firstBoot"];将返回0,直到您将默认值保存为一个值为止。0NO否则nil返回未存储任何值的键。

解决此问题的正确方法是在尝试检索这些用户默认值之前先注册默认值。

// register default values. until you save your own value "firstBoot" will return YES
// you should put these two lines in the `application:didFinishLaunchingWithOptions:`
// method of the AppDelegate. Add all userdefaults that should have default values there
NSDictionary *defaultUserDefaults = @{ @"firstBoot" : @YES };
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultUserDefaults];

// use BOOL instead of integer
BOOL firstBoot = [[NSUserDefaults standardUserDefaults] boolForKey:@"firstBoot"];
if (firstBoot) {
    NSLog(@"first launch");
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstBoot"];
    [[NSUserDefaults standardUserDefaults] synchronize]; 
}
else {
    NSLog(@"has been launched before");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

角度不加载我的指令

来自分类Dev

我的世界伪造不加载纹理

来自分类Dev

为什么我的角度工厂不加载?

来自分类Dev

为什么不加载我的路线?

来自分类Dev

为什么不加载我的字体?

来自分类Dev

我可以不加载我的.profile文件登录吗?

来自分类Dev

我不想要的EF Core加载关系

来自分类Dev

为什么node.js不加载我需要的模块?

来自分类Dev

为什么我的gradle构建不加载最新的依赖项?

来自分类Dev

为什么我的Erlang Shell不加载钢筋依赖项?

来自分类Dev

为什么我的AngularJS模块从不加载?

来自分类Dev

为什么node.js不加载我需要的模块?

来自分类Dev

为什么我的蛇游戏根本不加载?

来自分类Dev

我的谷歌地图不加载所有位置

来自分类Dev

为什么 wordpress 不加载我的 jQuery 脚本?

来自分类Dev

活动不加载布局

来自分类Dev

fullcalendar不加载事件

来自分类Dev

桌面闪烁,不加载

来自分类Dev

块不加载

来自分类Dev

Django不加载灯具

来自分类Dev

.xinitrc不加载.Xresources

来自分类Dev

角解析不加载

来自分类Dev

FragmentStatePagerAdapter 项目不加载

来自分类Dev

视图不加载 JSON

来自分类Dev

Android recyclerView 不加载

来自分类Dev

为什么在Heroku的我的Rails应用程序中不加载“超赞字体”图标?

来自分类Dev

运行我的应用程序时为什么不加载图像?

来自分类Dev

为什么在索引中单击我的show.html.erb时不加载?

来自分类Dev

EmacsMacPort (Emacs.app) 在 MacOS 中不加载我自己的 ~/.emacs