2017-12-16 14 views
-1

일단 응용 프로그램을 종료하면 NSUserDefaults에서 데이터를 지우고 싶지만 때로는 지워지지 않는 경우가 있습니다. 나는이 방법에 코드를 추가 한 :응용 프로그램 종료시 NSUserDefaults의 데이터 지우기

- (void)applicationWillTerminate:(UIApplication *)application { 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 
    [[NSUserDefaults standardUserDefaults]removeObjectForKey:kcoupondic]; 

    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
+0

: 'applicationWillResignActive'에서 시도하십시오. –

+1

'NSUserDefaults'는 앱이 종료 된 후에도 계속 유지되는 설정을 저장하기위한 것입니다. 앱 종료시 설정을 플러시하려면 왜 처음에는 'NSUserDefaults'를 사용하고 있습니까? 설정을 메모리에 저장하기 만하면됩니다. –

답변

3

당신이 응용 프로그램 종료에 값을 지우려면 왜 NSUserDefaults을 사용하고 있습니다. 대신

모든 NSUserDefaults이 시도 제거 wan't 경우 NSUserDefaults

또는

를 사용하여 전역 변수 :

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]; 
1

applicationWillTerminate는 항상 호출되지 않습니다. 이것은 애플의 문서에서 나온 것이다.

이 방법을 사용하면 앱이 메모리에서 완전히 제거되고 제거 될 것임을 알 수 있습니다. 공유 리소스 확보, 사용자 데이터 저장 및 타이머 무효화와 같이 앱의 최종 정리 작업을 수행하려면이 방법을 사용해야합니다. 이 방법을 구현하면 작업을 수행하고 돌아 오는 데 약 5 초가 소요됩니다. 메서드가 시간이 만료되기 전에 반환되지 않으면 시스템에서 프로세스를 완전히 중단시킬 수 있습니다. 백그라운드 실행을 지원하지 않거나 iOS 3.x 이하와 연결된 앱의 경우이 메소드는 사용자가 앱을 종료 할 때 항상 호출됩니다. 배경 실행을 지원하는 앱의 경우 앱이 단순히 배경으로 이동하기 때문에 사용자가 앱을 종료 할 때이 메소드는 일반적으로 호출되지 않습니다. 그러나이 방법은 앱이 백그라운드에서 실행되고 (일시 중지되지 않음) 시스템이 어떤 이유로 앱을 종료해야하는 상황에서 호출 될 수 있습니다.

데이터가 삭제되지 않는 이유에 대한 질문에 대답하려면 아마도이 방법이 호출되지 않을 수 있습니다. 일부 로그를 추가하여 메소드가 호출되는지 확인하십시오.

이 코드를 AppDelegate 내에 applicationDidFinishLaunchingWithOptions에 넣으려고합니다. 이 경우 모든 앱을 시작할 때마다 데이터를 다시 채우기 전에이 데이터를 삭제해야합니다.

+0

나는 동의하지만'applicationWillTerminate'에서 삭제할 것이고,'applicationDidFinishLaunchingWithOptions'에서 삭제가 작동하지 않을 경우를 대비해서 할 것입니다. –

-1

applicationWillTerminate 대신 applicationWillResignActive에 NSUserDefaults를 지우려면 코드를 작성하십시오.