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);
}
私に提案をぶつけてください:) よろしくお願いします!