2013-04-05 82 views
0

我正在制作iOS游戏,其中包含每个级别的评分系统。在这里,我有一些代码通过使用代理获取NSStringpassedValue1)。添加到以前保存的NSUserDefaults

赫雷什为代表的代码:.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我从一个发送的值

LevelCompleteLevel1 

标签目前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 *[email protected]"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值添加到当前保存值...

例如:

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

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

在此先感谢。使用

编辑 荫验证码:

- (void)viewDidLoad 
{ 

[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib 
NSString *[email protected]"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]; 
     } 

这是为什么不工作,标签的显示值是最初passedValue1?

+1

尝试。 – Girish 2013-04-05 12:30:01

+0

什么问题你现在得到这个值secondviewData.passedValue1 = label.text; (passedValue1)r不是? – Ganapathy 2013-04-05 12:40:04

+0

你能检查我的编辑并告诉我我做错了什么。谢谢 – TheCODER999 2013-04-05 18:15:07

回答

1

一次尝试这一个,使用的setValue代替的setObject

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

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

你能检查我的编辑,并告诉我我做错了什么。谢谢 – TheCODER999 2013-04-05 18:16:08

0

两件事情

  1. 当你添加的的NSString它是足够使用setValue: forKey:方法。 (不像你使用的setObject:forKey)

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

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

+0

你能检查我的编辑并告诉我我做错了什么。谢谢 – TheCODER999 2013-04-05 13:30:35