Ios 如何添加到已保存的NSUserDefault?

Ios 如何添加到已保存的NSUserDefault?,ios,objective-c,nsuserdefaults,Ios,Objective C,Nsuserdefaults,我正在用Xcode做一个游戏,每个关卡都有一个计分系统。这里我有一些代码,通过使用委托获取NSString(passedValue1) 然后我添加代码以接收viewDidLoad中的值,并在UILabel中显示我的值 -(void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib

我正在用Xcode做一个游戏,每个关卡都有一个计分系统。这里我有一些代码,通过使用委托获取NSString(passedValue1)

然后我添加代码以接收viewDidLoad中的值,并在UILabel中显示我的值

-(void)viewDidLoad
    { 


        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib

        // Do any additional setup after loading the view, typically from a nib
        NSString *key=@"labelKey";

        if(passedValue1){
            NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

            NSObject * object = [prefs valueForKey:key];
            if(object != nil){
                NSUserDefaults *defults = [NSUserDefaults standardUserDefaults];
                [defults setValue:passedValue1 forKey:key];
                [defults synchronize];
            }
            else{
                NSUserDefaults *defults = [NSUserDefaults standardUserDefaults];

                NSInteger readScore=[[[NSUserDefaults standardUserDefaults] valueForKey:key] integerValue];
                NSInteger newValue=readScore+[passedValue1 integerValue];
                [defults setValue:[NSString stringWithFormat:@"%d",newValue] forKey:key];
                [defults synchronize];

            }
        }
        label.text = [[NSUserDefaults standardUserDefaults]objectForKey:key];
    }
显示该值后,使用NSUserDefault将其保存到标签中。但是,一旦我重播了我的游戏,并且有了另一个得分值,我想将新的passedValue1值添加到当前保存的值中

例如: 假设我发挥我的水平,我得到的分数值为10。然后保存该值,然后我重播我的级别。然后,我想获取保存的值,并将其添加到我刚刚获得的值中。也就是说,我得到的第二个值是20。然后我希望我的代码将它们相加,并给我一个值30。 任何人都可以帮助我,因为我使用的代码没有正确执行我想要执行的功能,即添加上一个和当前传递的值

我的代码有什么问题


提前感谢。

您不应该为此使用
valueForKey:
(这不是您可能认为的,请参阅键值编码)。相反,您应该使用
objectForKey:
或者在您的情况下使用
integerworkey:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSInteger value = [defaults integerForKey:key];
value += [passedValue1 integerValue];
[defaults setInteger:value forKey:key];
BOOL success = [defaults synchronize];

您不应该为此使用
valueForKey:
(这不是您可能认为的,请参阅键值编码)。相反,您应该使用
objectForKey:
或者在您的情况下使用
integerworkey:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSInteger value = [defaults integerForKey:key];
value += [passedValue1 integerValue];
[defaults setInteger:value forKey:key];
BOOL success = [defaults synchronize];

似乎您的
条件有误,应该是

if (object == nil) { // <-- you have object != nil here !
    // save new value
} else {
    // read old value, add something, save new value
}

如果(object==nil){/似乎您得到了
如果
条件错误,则应该是

if (object == nil) { // <-- you have object != nil here !
    // save new value
} else {
    // read old value, add something, save new value
}

if(object==nil){//如果您执行上述场景,那么您得到的是旧值、新值或其他任何东西?使用断点检查您认为的天气条件是否满足。如果您执行上述场景,那么您得到的是旧值、新值或其他东西?使用断点检查您认为的天气条件无论您是否满意。(+1)这是一个简单得多的代码,也可以解决错误的
if
条件的问题,因为
integerworky
默认为零。(+1)这是一个简单得多的代码,还可以解决错误的
if
条件的问题,因为
integerworkey
默认为零。