2012-05-08 5 views
0

클래스 카드의 인스턴스를 포함하는 myWallet이라는 변경 가능한 배열을 저장하는이 방법이 있습니다.NSUserDefaults에 저장된 값 덮어 쓰기

- (void)saveMyWallet 
{ 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

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

    [defaults synchronize]; 
} 

내가 가진 카드 클래스에는 이름, 핀 및 점수의 세 가지 인스턴스 변수가 있습니다. 지금까지, UserDefaults에 카드의 새로운 인스턴스를 저장하는 것은 괜찮습니다. 포인트 계산을 진행할 때 포인트를 업데이트하기 때문에 포인트의 값을 어떻게 덮어 쓸 수 있는지에 대한 제안을 알고 싶습니다. 여기

#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 

그리고 마지막으로 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 

Card.m 내 카드 클래스

이며, 여기에 위임 방법은있는 점의 새로운 값 (resultPoints라는 이름이 붙어 있어야합니다).

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

제안 사항과 함께 저를 포격하십시오 :) 미리 감사드립니다!

답변

6

내가 본 것으로부터 실제로 개체를 NSData로 저장하므로 논리적 인 접근 방식은 사용자 기본값에서 복원하여 보관 취소하고 속성을 업데이트하고 보관 한 다음 다시 사용자 기본값으로 저장하는 것입니다.

+0

감사합니다. 그것을 지금 할 것이다 :) – Grauzten

+0

우리는 채팅을 진행할 수 있습니까? 몇 가지 코드를 보여야하는데, 여기에 붙여 넣으면 상당히 엉망이 될 것입니다. – Grauzten

+0

예, 문제가 없습니다. – graver

0

NSUserDefaults의 데이터를 런타임에 저장하고 이전 객체의 키를 삭제 한 다음 업데이트 된 값을 다시 기록합니다.