我正在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的值。 任何人都可以帮助,因为我正在使用的代码没有正确执行我想要做的功能,这是添加前一个和当前传递的值。
我的代码出了什么问题?
提前致谢。
答案 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
}