添加到以前保存的NSUserDefaults [英] Adding to a Previously saved NSUserDefaults

查看:176
本文介绍了添加到以前保存的NSUserDefaults的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



代表委托代码:

  LevelCompleteLevel1 

.h

  #importViewController.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 中的标签的值到另一个视图控制器,我发送的值称为 passValue1



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

  ViewController 

.h

  @interface ViewController:UIViewController {

IBOutlet UILabel * label;
NSString * passedValue1;
}
@property(nonatomic,retain)NSString * passedValue1;

@end

.m p>

首先我... @synthesize passedValue1;



然后,我添加代码以接收我的 viewDidLoad 中的值,并在$ code> UILabel

$中显示我的值b
$ b

   - (void)viewDidLoad 
{

[super viewDidLoad];
//加载视图后,执行任何其他设置,通常从nib
NSString * key = @labelKey;

//加载视图后,进行任何其他设置,通常从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 将其保存到标签中。但是,一旦我重播了我的游戏并获得了另一个分数值,我想将新$ code> passedValue1 值添加到当前保存的值...



例如:



说我玩我的水平,我的得分值为10.值为然后保存,我重播我的水平。然后我想把保存的值加到我刚刚得分的值上。所以说我得到的第二个值是20.我会喜欢我的代码添加在一起,给我一个值30。



任何人都可以帮助,因为我正在使用的代码不正确地执行我想要做的功能,它是添加上一个和当前传递的值。



提前感谢



编辑
Iam使用此代码:

   - (void)viewDidLoad 
{

[super viewDidLoad];
//加载视图后,执行任何其他设置,通常从nib
NSString * key = @labelKey;

//加载视图后,进行任何其他设置,通常从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];
}

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

解决方案

一次尝试这一个,

 code> NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:@10forKey:@old value];
[默认同步];

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


I am making a game for iOS which in includes a scoring system in each level. Here I have some code that gets an NSString (passedValue1) by using a delegate.

Heres the code for the delegate:

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

In the .m I send the a value from a label in the current viewcontroller to another view controller the value I send is called passedValue1

Once I have sent the value I need to display and save in my ViewController

ViewController

.h

@interface ViewController : UIViewController{

IBOutlet UILabel *label;
NSString *passedValue1;
}
@property (nonatomic, retain)NSString *passedValue1;

@end

.m

Firstly I ... @synthesize passedValue1;

Then i add the code to receive the value in my viewDidLoad and display my value in a 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];

}

Once I have displayed the value I then save it into a label using a NSUserDefault. However, once I have replayed my game and have another score value I would like to add the new passedValue1 value to the currently saved value...

For example:

say I play my level and I get the score value of 10. The value is then saved and I replay my level. I would then like to take the saved value and add it to the value i just scored. So thats say the second value I have scored is 20. I would then like my code to add them together and give me a value of 30.

can anyone help because the code I'm using does not correctly do the function that I want to do which is add the previous and the currently passed value.

Thanks in advance.

edit Iam using this code:

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

Why is this not working , the displayed value of the label is the originally passedValue1?

解决方案

once try this one ,

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

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

这篇关于添加到以前保存的NSUserDefaults的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆