如何添加到已保存的NSUserDefault?

时间:2013-04-06 10:39:06

标签: 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

        // 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];
    }

一旦我显​​示了值I,然后使用NSUserDefault将其保存到标签中。但是,一旦我重播了我的游戏并获得了另一个得分值,我想将新的passValue1值添加到当前保存的值...

例如: 说我玩我的等级,我得到10的分数值。然后保存值,我重播我的水平。然后我想获取保存的值并将其添加到我刚刚得分的值中。所以这就是说我得分的第二个值是20.然后我想我的代码将它们加在一起并给我一个30的值。 任何人都可以帮助,因为我正在使用的代码没有正确执行我想要做的功能,这是添加前一个和当前传递的值。

我的代码出了什么问题?

提前致谢。

2 个答案:

答案 0 :(得分:3)

您不应该使用valueForKey:(这不是您认为的那样,请参阅键值编码)。相反,您应该使用objectForKey:或您的integerForKey:

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

答案 1 :(得分:1)

您的if条件似乎错了,应该是

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