【问题标题】:Overwrite a value saved in NSUserDefaults覆盖保存在 NSUserDefaults 中的值
【发布时间】:2012-05-08 06:48:55
【问题描述】:

我有这个方法来保存一个名为 myWallet 的可变数组,其中包含 Class Card 的实例。

- (void)saveMyWallet
{

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [defaults setObject:[NSKeyedArchiver archivedDataWithRootObject:self.myWallet] forKey:@"myWalletArray"];

    [defaults synchronize];
}

我拥有的 Card 类具有三个实例变量:名称、引脚和点数。到目前为止,在 UserDefaults 中保存 Card 的新实例是可以的。我只是想知道一些关于如何覆盖积分值的建议,因为当我继续计算积分时,我想更新它。

这是我的卡片类

卡.h

#import <Foundation/Foundation.h>

@interface Card : NSObject <NSCoding>

    @property (nonatomic, strong) NSString *name;
    @property (nonatomic, strong) NSString *pin;
    @property (nonatomic, strong) NSNumber *points;
    @property (nonatomic, strong) NSMutableArray *pointsToDeduct;


- (double) subtractPoints: (double) requiredPoints;
- (void) encodeWithCoder:(NSCoder *)coder;
- (id) initWithCoder: (NSCoder *)coder;
@end

卡.m

#import "Card.h"

@implementation Card 

@synthesize name = _name;
@synthesize pin = _pin;
@synthesize points = _points;
@synthesize pointsToDeduct = _pointsToDeduct;

- (id)initWithCoder:(NSCoder *)coder 
{    
    self = [[Card alloc] init];
    if(self != nil) {
        self.name = [coder decodeObjectForKey:@"name"];
        self.pin = [coder decodeObjectForKey:@"pin"];
        self.points = [coder decodeObjectForKey:@"points"];

    }

    return self;
}

- (void)encodeWithCoder:(NSCoder *)coder 
{
    [coder encodeObject:self.name forKey:@"name"];
    [coder encodeObject:self.pin  forKey:@"pin"];
    [coder encodeObject:self.points forKey:@"points"];

}

- (double) subtractPoints:(double) requiredPoints
{

    double latestPoints;

    latestPoints = ([self.points doubleValue] - requiredPoints);

    return latestPoints;
}

@end

最后,这里是点的新值(命名为结果点)应该来自的委托方法。

- (void)perksDetailsViewController:(PerksDetailsViewController *)sender didPassRequiredPoints:(NSNumber *)requiredPoints withCard:(Card *)selectedCard 
{

    double perksPoints = [requiredPoints doubleValue];

    self.resultingPoints = [NSNumber numberWithDouble:[selectedCard subtractPoints:perksPoints] ];

    NSLog(@"points remaining %@", self.resultingPoints); 
}

用建议轰炸我 :) 提前致谢!

【问题讨论】:

    标签: iphone ios xcode nsuserdefaults


    【解决方案1】:

    据我所见,您实际上将对象保存为 NSData,因此合乎逻辑的方法是从用户默认值中取回它,取消存档,更新属性,存档并将其保存回用户默认值。

    【讨论】:

    • 我们可以继续聊天吗?我必须显示一些代码,如果我在这里粘贴它会很乱。
    • >.
    • 它实际上要求我们在 cmets 变得更多时继续聊天.. :P
    • 哈哈是的,我认为应该可以,但我也找不到
    【解决方案2】:

    将数据从 NSUserDefaults 检索到运行时,删除之前的 key 对象并写回更新的值。

    【讨论】:

      猜你喜欢
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      相关资源
      最近更新 更多