添加到以前保存的NSUserDefaults
我正在为iOSdevise一款游戏,其中包括每个级别的评分系统。 在这里我有一些代码,通过使用委托获取NSString
( passedValue1
)。
下面是代表的代码:
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
我的游戏,并有另一个分数值,我想将新的passedValue1
值passedValue1
添加到当前保存的值…
例如:
说我玩我的水平,我得到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;
两件事情
-
在添加NSString时,使用
setValue: forKey:
方法就足够了。 (不像你使用的setObject:forKey) -
NSUserDefaults
是一个基于键的值保存机制。 如果您尝试将该值保存在同一个键中,则保存的值将被当前的保存值replace。
所以在你的情况下,只需要调用与新值相同的密钥,并用旧的值replace旧值。