2011-06-11 6 views
0

사용자가 게임의 다양한 속성을 업그레이드 할 수있는 업그레이드 장면이 있으며 해당 정보를 저장하고 싶습니다. 예를 들어 사용자가 1000 포인트를 소비하여 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이 내부적으로 저장되는 방법에 대해 걱정할 필요가 없으므로 ivar가 아닌 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

다른 방법보다 훨씬 단순 해 보이지 않습니다. – Joethemonkey101

+0

그게 단순하다는 겁니다. 다른 접근법에서는 "ivar 설정"을 반복하고 강제로 터치하면 모든 장소에 NSUserDefaults를 설정해야합니다.이 접근 방식은 그것은 하나의 장소 (접근 자)에 있습니다. 항상 "self.mag"를 사용하는 한, 옳은 일을 투명하게 수행 할 것입니다. 만약 당신이 당신의 mag를 저장하는 방법을 바꾸었다면, mag를 사용하는 모든 장소가 아닌 한 곳에서 그것을 수정하십시오. 또한 viewDidLoad에서 초기화 할 때 발생하는 모든 타이밍 문제를 없애줍니다 (객체를 만든 후 오랜 시간 동안 실행할 수 있으며 여러 번 실행할 수 있습니다). –

+0

것은 d 'mag'를 다른 클래스의 int로 사용하십시오. NSNumber로 변경해야합니까?이 클래스로 가져 오기 위해 특별한 작업을 수행해야합니까? – Joethemonkey101

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

+0

오류가 발생한 위치를 알려주지는 않습니다. 위의 코드에서 꼭 필요한 것은 아닙니다. 콘솔 출력을 삽입하십시오. 그건 그렇고 어떻게 mag ivar를 만드나요? – Cyprian

+0

아마도 그게 문제 일 겁니다. 나는 다른 반의 .h에서 그것을 만든다. 문제는 내가 잘못 가져 왔다고 생각합니다. 나는 클래스를 클래스화 한 다음, @property (nonatomic, assign) int mag; ' – Joethemonkey101