2010-04-18 8 views
0

다른 답변과 문서를 보았습니다. 어쩌면 내가 뭔가를 놓치고 있거나 다른 문제가있을 수 있습니다. 앱을 종료 할 때 숫자를 저장하려고 시도하고 앱이로드되면이 값이 존재하는지 확인하고 이에 따라 조치를 취하고 싶습니다. 이것은 내가 시도 것입니다 :NSUserDefaults : 저장된 번호 항상 0, iPhone

종료에 저장하려면 :

- (void)applicationWillTerminate: (UIApplication *) application 
{ 
double save = [label.text doubleValue]; // This could be the issue 

//double save = 3.5; // This works, it saves the value and loads it fine, so that is not the problem here. 

[[NSUserDefaults standardUserDefaults] setDouble: save forKey: @"savedNumber"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
} 

확인하려면

- (IBAction)buttonclickSkip{ 

double save = [[NSUserDefaults standardUserDefaults] doubleForKey: @"savedNumber"]; 

if (save == 0) { 

    [self performSelector:@selector(displayAlert) withObject:nil]; 

    test.enabled = YES; 
    test.alpha = 1.0; 

    skip.enabled = NO; 
    skip.alpha = 0.0; 

    } 

else { 

label.text = [NSString stringWithFormat:@"%.1f %%", save]; 
} 

} 
문제는 내가 항상 내 경고 메시지가 표시 얻을되는

저장된 값을 넣어하지 않습니다 그래서 어떻게 든 == 0은 항상 참입니다. 이유 :

double save = [label.text doubleValue]; 

항상 0입니까? 앱을 종료하기 전에 해당 라벨의 숫자는 대략 0.5 % (다양 함)입니다. 차이가 있다면 iPhone 시뮬레이터에서 테스트하고 있습니다.

많은 감사,

스투

+0

'applicationWillTerminate :'에 중단 점을 설정하십시오. 'label'의 가치는 무엇입니까? 그것은 '아니오'입니까? 그리고 pheelicks가 묻는 것처럼,'save'의 가치는 무엇입니까? –

+0

중단 점에 도달하지 않았습니다. applicationWillTerminate가 내 apploadViewController.m에 있습니다 ...이게 맞습니까? – Stumf

+0

jlehr가 내 다음 질문에 나를 이겼다. (왜 내가 더 많은 정보를 먼저 요구했는지) –

답변

1

값을 하드 코딩하여 다시 가져올 수 있다는 사실은 label.text과의 상호 작용을 중심으로하고 NSUserDefaults을 사용하지 않는 것을 의미합니다.

해당 값을 가져올 때 레이블이 이미 소멸되지 않았는지 확인하십시오. 응용 프로그램이 종료됨에 따라 값을 가져 오는 뷰가 이미 다운되었을 수 있습니다.

또 다른 것은 텍스트 값을 숫자로 변환하도록 OS에 요청하는 대신 실제 텍스트 자체를 가져 오는 것입니다. 당신이 그것을 인쇄하면 무슨 일이 일어나고 있는지에 대한 단서를 얻을 수 있습니다.

+0

레이블이 이미 파괴되었다는 이론은 옳은 것 같습니다. 지금 일하고있어. 도와 주신 모든 분들께 감사드립니다! – Stumf

0

내 생각 엔 레이블의 텍스트가 유효한 double 값 아니라고 할 것이다. 있는 NSString -doubleValue에 대한 애플의 문서에서 : 수신기가 유효한 텍스트 표현 부동 소수점 숫자의 로 시작하지 않을 경우

0.0을 돌려줍니다.

@ "13.2"와 같이 전달했는지 확인하십시오. 이를 확인하는 가장 좋은 방법은 save 변수를 만든 직후에 NSLog 호출을 사용하는 것입니다.

+0

흠 이것은 처음에 라벨에 값을 입력하는 줄입니다. label.text = [NSString stringWithFormat : @ "%. 1f %%", number]; 실제 레이블에는 "12.7 %"와 같은 숫자가 포함되어 있습니다. – Stumf

+0

레이블을 퍼센트 기호없이 3.5로 변경했지만 여전히 경고를 표시합니다. – Stumf

1

applicationWillTerminate: 구현이 앱 대리인 클래스에 있는지 확인하십시오.

+0

질문에 새로운 정보를 추가했습니다.applicationWillTerminate가 지금 치고 있습니다. – Stumf