0

我正在用 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 将它保存到一个标签中。但是,一旦我重玩了我的游戏并获得了另一个得分值,我想将新的 passValue1 值添加到当前保存的值中......

例如: 假设我玩了我的关卡,我得到了 10 的得分值。然后保存该值并重新玩我的关卡。然后我想获取保存的值并将其添加到我刚刚得分的值中。所以这就是说我得分的第二个值是 20。然后我希望我的代码将它们加在一起并给我一个 30 的值。任何人都可以帮忙,因为我使用的代码没有正确执行我想要的功能这样做是添加上一个和当前传递的值。

我的代码有什么问题??

提前致谢。

4

2 回答 2

3

您不应该使用valueForKey:它(这不是您可能认为的那样,请参阅Key-Value Coding)。相反,您应该使用objectForKey:or 在您的情况下integerForKey:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSInteger value = [defaults integerForKey:key];
value += [passedValue1 integerValue];
[defaults setInteger:value forKey:key];
BOOL success = [defaults synchronize];
于 2013-04-06T10:49:32.073 回答
1

看来你的if条件错了,应该是

if (object == nil) { // <-- you have object != nil here !
    // save new value
} else {
    // read old value, add something, save new value
}
于 2013-04-06T10:51:35.887 回答