Ios 如何添加到已保存的NSUserDefault?
我正在用Xcode做一个游戏,每个关卡都有一个计分系统。这里我有一些代码,通过使用委托获取NSString(passedValue1) 然后我添加代码以接收viewDidLoad中的值,并在UILabel中显示我的值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
-(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
默认为零。