2010-11-19 2 views
3

NSUserDefault 개체에 정수 값을 전달하여 앱을로드 할 때 사용할 저장소로 사용합니다. I HAD 정수 값을 부동 소수점으로 전환 할 때까지 완벽하게 작동합니다. 그것은 많은 문제를 야기 시켰습니다. 그래서 저는 접근법을 재조정했고, 정수의 안전에 대한 명령을 내 렸습니다 ... 아니면 생각했습니다.NSUserDefault가 전달한 값을 등록하는 데 몇 초가 걸립니까?

이전에 값을 저장하면 즉시 시뮬레이터를 닫을 수 있었고 콘솔은 올바르게 저장된 번호를 문제없이 빠져 나갈 수있었습니다. 그 바보 같은 float 혼란 이후 (지금 내 NSUserDefault 객체를 손상시킬 수 있습니까? 그냥 바보 같아요 ...), 올바른 번호를 표시하는 것은 다소 도박입니다.

나는 많은 NSLogs를 거쳤으며, 내가 save 할 때 저장 한 값이 UserDefault 클래스의 set 메소드에 올바르게 전달되고 있는지 확인할 수있다. 설정 방법은 제대로 값을 가져옵니다하고 그래서 같이 NSUD 객체에 설정합니다

[self setObject:[NSNumber numberWithInteger:num] forKey:savedNum]; 

나는 그 객체 제대로 값 밖으로 콘솔 인쇄에 get 메소드를 실행합니다. 앱이로드 될 때, 방금 테스트 한 동일한 get 메소드를 호출하지만 항상 올바른 결과를 반환하지는 않습니다. 때때로, 이전에 저장 한 값이 표시됩니다.

앱을 닫기 전에 저장 버튼을 누르고 5 초 정도 기다렸다가 이전에는 제대로 작동했지만 드물게 발생했습니다. 10 초를 기다리면 올바른 번호가 울립니다.

왜이 작업과 관련이 있습니까? 나는 단지 이것이 어제 정확하게 올바르게 작동했기 때문에 이것이 왜 일어나고 있는지에 대한 완전한 상실에 이르렀습니다 ...

어떤 생각이나 의견을 부탁드립니다 !!

답변

9

-synchronize NSUserDefaults를 확인 했습니까?

+0

잘 모르겠습니다. 어떻게 동기화합니까? – Jerry

+0

전화가 잘되었지만 플래시로 쓰여지는 것만 제어한다고 생각합니다. (문서에 따르면) "메모리 캐시 (in-memory cache)"를 유지합니다. 즉, 리드 아웃시 일관성을 유지해야합니다. – Brad

+0

@Jerry Do [nsudobjectnamehere synchronize]. –

1

나는 그 행동을 결코 알아 채지 못했습니다. 지연이 관련되어 있다고 생각하지 않습니다.

그래서 가장 명백한 질문은 :

[[NSUserDefaults standardUserDefaults] setInteger:value ForKey:@"myInteger"]; 
NSLog(@"It is %d",[[NSUserDefaults standardUserDefaults] integerForKey:@"myInteger"]); 

당신이 올바른 값을받을 수 있나요 :

당신이한다면?

+0

예, 위의 NSLog를 던져서 다른 사람들과 같은 값을 만들어 냈습니다. 그것이 응용 프로그램을 종료하기 전에 그것은 올바른 경우, 그것을로드하는 동안 그것은 잘못된 숫자를 생산 ... 그래서 이상한 !! – Jerry

0

나는 이것이 시뮬레이터 버그라고 생각합니다. 시뮬레이션 된 장치에서 응용 프로그램을 사용하여 Settings.app를 엽니 다. 이제 Settings.app를 종료하십시오. 갑자기 기본 설정이 작동하기 시작합니다.

non-sticky NSUserDefaults issue에 관한 애플 토론 포럼의이 스레드도 참조하십시오.

+0

그래서 시뮬레이터에서 기어가있는 것과 같은 설정 앱으로 이동하십시오. 열어서 닫으시겠습니까? 나는 그것을 시도하고 도움이되지 않았다 ... 내가 집에 도착했을 때 그것을 내 장치 위에 던져서 도움이되는지 확인하려고한다. 나는 이것이 단지 시뮬레이터 버그 일 뿐이라고 희망한다. 감사합니다. – Jerry

+0

나는이 시뮬레이터 문제에 부딪쳤다. 그리고 그 춤은 나를 위해 그것을 고쳐 준 것처럼 보였다. :\ 죄송합니다! –

관련 문제