添加到以前保存的NSUserDefaults

我正在为iOSdevise一款游戏,其中包括每个级别的评分系统。 在这里我有一些代码,通过使用委托获取NSStringpassedValue1 )。

下面是代表的代码:

 LevelCompleteLevel1 

。H

 #import "ViewController.h" @interface LevelCompleteLevel1 : UIViewController{ IBOutlet UILabel *label; ViewController *secondviewData; } @property (nonatomic, retain)ViewController*secondviewData; 

.M

 ViewController *second = [[ViewController alloc] initWithNibName:nil bundle:nil]; self.secondviewData = second; secondviewData.passedValue1 = label.text; [self presentModalViewController:second animated:YES]; 

.m我发送一个值从当前view controller的标签到另一个view controller我发送的值被称为passedValue1值1

一旦我发送了我需要显示并保存在ViewController

 ViewController 

。H

 @interface ViewController : UIViewController{ IBOutlet UILabel *label; NSString *passedValue1; } @property (nonatomic, retain)NSString *passedValue1; @end 

.M

首先我… @synthesize passedValue1;

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

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib NSString *key=@"labelKey"; // Do any additional setup after loading the view, typically from a nib if(passedValue1){ NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSObject * object = [prefs objectForKey:key]; if(object != nil){ NSUserDefaults *defults = [NSUserDefaults standardUserDefaults]; [defults setObject:passedValue1 forKey:key]; [defults synchronize]; } else{ NSUserDefaults *defults = [NSUserDefaults standardUserDefaults]; NSInteger readScore=[[[NSUserDefaults standardUserDefaults] objectForKey:key] integerValue]; NSInteger newValue=readScore+[passedValue1 integerValue]; [defults setObject:[NSString stringWithFormat:@"%d",newValue] forKey:key]; [defults synchronize]; } } label.text = [[NSUserDefaults standardUserDefaults]objectForKey:key]; 

}

一旦我显示了值,然后使用NSUserDefault将其保存到标签中。 但是,一旦我重新passedValue1我的游戏,并有另一个分数值,我想将新的passedValue1passedValue1添加到当前保存的值…

例如:

说我玩我的水平,我得到10的分数值。然后保存价值,我重新我的水平。 然后,我想把保存的价值,并将其添加到我刚刚得分的价值。 这就是说,我得到的第二个值是20.我会喜欢我的代码将它们加在一起,给我一个值30。

任何人都可以帮助,因为我使用的代码不正确做我想要做的function,这是添加以前和当前传递的值。

提前致谢。

使用以下代码编辑 Iam:

  - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib NSString *key=@"labelKey"; // Do any additional setup after loading the view, typically from a nib if(passedValue1){ NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSObject * object = [prefs objectForKey:key]; if(object != nil){ NSUserDefaults *defults = [NSUserDefaults standardUserDefaults]; [defults setObject:passedValue1 forKey:key]; [defults synchronize]; } else{ NSUserDefaults *defults = [NSUserDefaults standardUserDefaults]; NSInteger readScore=[[[NSUserDefaults standardUserDefaults] objectForKey:key] integerValue]; NSInteger newValue=readScore+[passedValue1 integerValue]; [defults setValue:[NSString stringWithFormat:@"%d",newValue] forKey:key]; [defults synchronize]; } } label.text = [[NSUserDefaults standardUserDefaults]objectForKey:key]; } 

为什么这不起作用,标签的显示值是原来传入的值1?

一旦尝试这一个,

  NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setObject:@"10" forKey:@"old value"]; [defaults synchronize]; int k=[[defaults objectForKey:@"old value"] intValue]+newValue; 

两件事情

  1. 在添加NSString时,使用setValue: forKey:方法就足够了。 (不像你使用的setObject:forKey)

  2. NSUserDefaults是一个基于键的值保存机制。 如果您尝试将该值保存在同一个键中,则保存的值将被当前的保存值replace。

所以在你的情况下,只需要调用与新值相同的密钥,并用旧的值replace旧值。