2012-01-27 6 views
2

iPhone에 설정을 즉시 저장할 수 있습니까? iOS 4 이상의 앱이 종료 될 때 닫히지 않으며 Xcode 설정에서 '프로세스 중지'를 누르면 설정이 저장되지 않습니까? 어떻게 저장합니까?iPhone에 설정을 즉시 저장하는 방법은 무엇입니까?

- (void)compLoad { 
    compTotal = [[NSUserDefaults standardUserDefaults] integerForKey: @"compTotal"]; 
    compCount = [[NSUserDefaults standardUserDefaults] integerForKey: @"compCount"]; 
    compShow = [[NSUserDefaults standardUserDefaults] boolForKey: @"compShow"]; 
} 

- (void)compSave { 
    [[NSUserDefaults standardUserDefaults] setInteger: compTotal forKey: @"compTotal"]; 
    [[NSUserDefaults standardUserDefaults] setInteger: compCount forKey: @"compCount"]; 
    [[NSUserDefaults standardUserDefaults] setBool: compShow forKey: @"compShow"]; 
} 

답변

7
- (void)compSave 
{ 
    [[NSUserDefaults standardUserDefaults] setInteger: compTotal forKey: @"compTotal"]; 
    [[NSUserDefaults standardUserDefaults] setInteger: compCount forKey: @"compCount"]; 
    [[NSUserDefaults standardUserDefaults] setBool: compShow forKey: @"compShow"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
2

[[NSUserDefaults standardUserDefaults] synchronize];. 하지만 대개는 이 아니라이 필요합니다. iOS는 앱이 백그라운드로 들어가면 저장되며 몇 가지 다른 경우에 저장됩니다. synchronize을 너무 자주 호출하는 것은 나쁜 일 (tm)로 간주됩니다.

+0

NSUserDefaults에서 compSave가 – Dmitry

+0

데이터가 중요한가요 올 -이) 대답을 주셔서 감사합니다 좋은 일입니다. – Dmitry

+1

'synchronize'가 올바른 해결책이기 때문에 (나는 지난 몇 년 동안 여러 프로젝트에서 NSUserDefaults를 사용 해왔다.) 문제는 다른 곳에서해야만한다. 어딘가 설정을 덮어 쓸 수 있을까요? 예를 들어, 앱 시작시 실수로'compSave'를'compLoad' 전에 ​​호출하면 "empty"값을 다시 얻게됩니다. 'compSave'와'compLoad'에 중단 점을 설정하고 앱을 시작할 때 가장 먼저 호출되는 것을보십시오. – DarkDust

6

설명서에 따르면 다음 호출은 해결되지 않은 수정 사항을 유지합니다. 성공했는지 확인하려면이 호출의 반환 값을 확인하십시오. YES 값은 성공을 나타냅니다.

[[NSUserDefaults standardUserDefaults] synchronize]; 
+0

실패하는 방법에 대한 자세한 정보를 제공 할 수 있습니까? 사용자 기본값을 설정하고 가져 오는 코드가 도움이 될 수 있습니까? – wattson12

1

synchronize 메서드를 사용해보십시오.

업데이트 : 그것은 Preferences and Settings Programming Guide에 제안처럼 당신이 당신의 기본값을 등록 고려해야합니다

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Register the preference defaults early. 
    NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:@"CacheDataAgressively"]; 
    [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults]; 

    // Other initialization... 
} 

을 또한,이 가이드에서 ("동기화 및 검출 기본 설정 변경")에 대한 동기화 :

기본 설정 값 변경이 발생했을 때이를 감지하기 위해 앱은 알림 NSUserDefaultsDidChangeNotification에 등록 할 수도 있습니다. 공유 NSUserDefaults 객체는 영구 도메인 중 하나에있는 환경 설정에 대한 변경을 감지 할 때마다이 알림을 앱에 보냅니다. 이 알림을 사용하여 사용자 인터페이스에 영향을 줄 수있는 변경 내용에 응답 할 수 있습니다. 예를 들어 사용자의 기본 언어에 대한 변경 사항을 감지하고 앱 콘텐츠를 적절히 업데이트하는 데 사용할 수 있습니다.

직접 설정을 다시 읽으려면 여전히 synchronize을 사용해야합니다.

+0

모든 답변이 도움이되지 않았습니다! – Dmitry

3

를 호출하여 당신의 AppDelegate

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    // Call your compSave here to force saving before app is going to the background 
} 

또한

- (void)compSave 
{ 
    [[NSUserDefaults standardUserDefaults] setInteger: compTotal forKey: @"compTotal"]; 
    [[NSUserDefaults standardUserDefaults] setInteger: compCount forKey: @"compCount"]; 
    [[NSUserDefaults standardUserDefaults] setBool: compShow forKey: @"compShow"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
+0

위에서 언급 한 AppDelegate 메소드에서'compSave'를 호출 했습니까? –

+0

모든 변수가 변경된 후에이를 호출합니다. – Dmitry

관련 문제