添加到以前保存的NSUserDefaults

时间:2013-04-05 12:23:45

标签: ios objective-c delegates nsuserdefaults

我正在制作一款适用于iOS的游戏,其中包括每个级别的评分系统。在这里,我有一些使用委托获得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我将当前viewcontroller标签中的值发送给另一个view controller,我发送的值称为passedValue1

我发送了需要显示的值并保存在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];

}

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

例如:

说我玩我的等级并得到10分。然后保存该值并重播我的等级。然后我想获取保存的值并将其添加到我刚刚得分的值中。所以这就是说我得分的第二个值是20.然后我想让我的代码将它们加在一起,给我一个30的值。

任何人都可以提供帮助,因为我使用的代码没有正确执行我想要执行的功能,即添加上一个和当前传递的值。

提前致谢。

修改 我使用这段代码:

 - (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];
       }

为什么这不起作用,标签的显示值是最初传递的Value1?

2 个答案:

答案 0 :(得分:1)

尝试过这个,

  NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    [defaults setObject:@"10" forKey:@"old value"];
    [defaults synchronize];

    int k=[[defaults objectForKey:@"old value"] intValue]+newValue;

答案 1 :(得分:0)

两件事

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

  2. NSUserDefaults是一种基于密钥的值保存机制。如果您尝试将值保存在同一个键中,则保存的值将替换为当前保存值。

  3. 因此,在您的情况下,只需使用新值调用相同的键,并将旧值替换为新值。