2011-06-11 142 views
0

我有一个升级场景,用户可以升级游戏的不同属性,并且我希望保存这些信息。例如,当用户花费1000点将mag升级到5时,我希望为下次启动应用程序保存该信息。我被告知NSUserDefaults是一个很好的方法来做到这一点。这是正确保存/加载mag int的正确方法吗?用NSUserDefaults保存/加载数据(cocos2d iphone)

-(void)plusFiveMag:(id)sender { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:NSNumber numberWithInt:mag forKey:@"mag"]; 
    mag += 5; 
} 
-(void)viewDidLoad { 
    [super viewDidLoad]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:NSNumber numberWithInt:mag forKey:@"mag"]; 
} 

回答

4

使用访问使这一切变得更轻松。使用访问器意味着您不必担心mag是如何存储在内部的,因此您可以透明地将其存储在NSUserDefaults而不是伊娃。

@property (nonatomic, readonly, assign) NSUInteger mag; 

NSString * const kMagDefaultsKey = @"mag"; 

- (NSUInteger)mag { 
    return [[NSUserDefaults standardUserDefaults] integerForKey:kMagDefaultsKey]; 
} 

- (void)setMag:(NSUInteger)value { 
    [[NSUserDefaults standardUserDefaults] setInteger:value forKey:kMagDefaultsKey]; 
} 

- (void)addFiveToMag:(id)sender { 
    self.mag = self.mag + 5; 
} 
+0

它看起来并不比其他方法简单得多。如果我还需要在其他地方使用'mag'? – Joethemonkey101 2011-06-11 21:47:37

+0

这就是我的意思,它更简单。其他方法迫使你重复“设置伊娃和设置NSUserDefaults”每一个你碰到mag的地方。它在一个地方(访问者),只要你总是使用“self.mag”,它就会透明地做正确的事情,如果你改变了存储mag的方式,你就把它修复在一个地方,而不是每个使用mag的地方。此外,这消除了在viewDidLoad中初始化所涉及的所有时间问题(这可以在创建对象后运行很长时间,并且可以运行多次)。 – 2011-06-12 17:59:01

+0

事情是我创建d'mag'作为另一个类中的int。是否必须将其更改为NSNumber,并且是否必须执行任何特殊操作才能将其导入此类中? – Joethemonkey101 2011-06-12 21:16:56

0

商店这样的:

-(void)plusFiveMag:(id)sender { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setInteger:mag forKey:@"mag"]; 
    mag += 5; 
} 

为了得到它,你将不得不使用:

-(void)viewDidLoad { 
    [super viewDidLoad]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    int mag = [defaults integerforKey:@"mag"]; 
} 
+0

得到了“以前的错误困惑,救助”错误 – Joethemonkey101 2011-06-11 21:05:06

+0

这并不足以说明错误发生的位置。上面的代码并不需要。插入控制台输出。顺便说一下,你如何创建mag ivar? – Cyprian 2011-06-11 21:07:20

+0

这可能是问题所在。我在另一个课程的.h中创建它。问题是我输入错了,我猜。我对班级进行了分类,然后做了@property(nonatomic,assign)int mag; ' – Joethemonkey101 2011-06-11 21:44:16