0

Class Card のインスタンスを含む myWallet という名前の変更可能な配列を保存するこのメソッドがあります。

- (void)saveMyWallet
{

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

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

    [defaults synchronize];
}

私が持っている Card クラスには、name、pin、points の 3 つのインスタンス変数があります。これまでのところ、Card の新しいインスタンスを UserDefaults に保存することは問題ありません。ポイントの計算を進めて更新したいので、ポイントの値を上書きする方法についていくつかの提案を知りたいです。

これが私のカードクラスです

カード.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

最後に、(resultingPoints という名前の) ポイントの新しい値を取得するデリゲート メソッドを次に示します。

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

私に提案をぶつけてください:) よろしくお願いします!

4

2 に答える 2

6

私が見たところ、実際にはオブジェクトを NSData として保存しているため、論理的なアプローチは、ユーザーのデフォルトから取得し、アーカイブを解除し、プロパティを更新し、アーカイブして、ユーザーのデフォルトに戻すことです。

于 2012-05-08T06:53:25.470 に答える
0

NSUserDefaultsからランタイムにデータを取得し、キーの前のオブジェクトを削除して、更新された値を書き戻します。

于 2012-05-08T06:59:39.670 に答える