2013-04-06 3 views
0

Xcode에서 각 레벨의 점수 체계가 포함 된 게임을 만들고 있습니다. 여기에 대리자를 사용하여 NSString (passedValue1)을 가져 오는 코드가 있습니다. 나는 다음 NSUserDefault를 사용하여 레이블에 저장 값을 표시하면저장된 NSUserDefault에 추가하는 방법은 무엇입니까?

그럼 내가 UILabel의

-(void)viewDidLoad 
    { 


     [super viewDidLoad]; 
     // Do any additional setup after loading the view, typically from a nib 

     // Do any additional setup after loading the view, typically from a nib 
     NSString *[email protected]"labelKey"; 

     if(passedValue1){ 
      NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 

      NSObject * object = [prefs valueForKey:key]; 
      if(object != nil){ 
       NSUserDefaults *defults = [NSUserDefaults standardUserDefaults]; 
       [defults setValue:passedValue1 forKey:key]; 
       [defults synchronize]; 
      } 
      else{ 
       NSUserDefaults *defults = [NSUserDefaults standardUserDefaults]; 

       NSInteger readScore=[[[NSUserDefaults standardUserDefaults] valueForKey:key] integerValue]; 
       NSInteger newValue=readScore+[passedValue1 integerValue]; 
       [defults setValue:[NSString stringWithFormat:@"%d",newValue] forKey:key]; 
       [defults synchronize]; 

      } 
     } 
     label.text = [[NSUserDefaults standardUserDefaults]objectForKey:key]; 
    } 

내있는 viewDidLoad의 값을 받아 내 값을 표시하는 코드를 추가합니다. 내 게임을 재생하고 다른 점수 값이 일단 그러나, 나는 예를 들어

... 현재 저장된 값으로 새 passedValue1 값을 추가하고 싶습니다 : 은 내 수준을 재생 말하고 나는 점수를 얻을 값을 저장하고 레벨을 재생합니다. 그런 다음 저장된 값을 가져 와서 방금 득점 한 값에 추가하고 싶습니다. 그래서 내가 득점 한 두 번째 가치가 20이라고 말합니다. 나는 그 코드를 함께 추가하고 30의 가치를 부여하는 코드를 원합니다. 사용하고있는 코드가 올바르게 작동하지 않기 때문에 아무도 도움을받을 수 있습니다. to는 이전 값과 현재 전달 된 값을 추가합니다.

내 코드에 어떤 문제가 있습니까 ??

미리 감사드립니다.

+0

을해야 보인다? – Balu

+0

한 번 귀하의 시점에서 날씨 조건이 만족스럽지 않거나 중단 점인지 확인하십시오. – Balu

답변

3

valueForKey:을 사용해서는 안됩니다 (생각하는 것과 다를 수 있습니다. 키 - 값 코딩 참조). 대신, objectForKey: 또는 귀하의 경우 integerForKey:을 사용해야합니다.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSInteger value = [defaults integerForKey:key]; 
value += [passedValue1 integerValue]; 
[defaults setInteger:value forKey:key]; 
BOOL success = [defaults synchronize]; 
+0

(+1) 이것은 훨씬 간단한 코드이며 잘못된 'if'조건의 문제도 해결합니다. 왜냐하면'integerForKey'의 기본값은 0이기 때문입니다. –

1

당신이 이전 값 또는 새 값 또는 다른 어떤 수단을 받고 무엇을 다음 시나리오 이상 수행 할 경우 당신은 당신의 if 조건의 잘못을 가지고 있음을, 그것이

if (object == nil) { // <-- you have object != nil here ! 
    // save new value 
} else { 
    // read old value, add something, save new value 
} 
관련 문제