簡體   English   中英

應用終止時從NSUserDefaults清除數據

[英]Clear data from NSUserDefaults when app kill

一旦我殺死了應用程序,那么我想從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];
}

如果要在應用終止時清除值,為什么要使用NSUserDefaults

使用全局變量代替NSUserDefaults

要么

如果您NSUserDefaults刪除所有NSUserDefaults嘗試以下操作:

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

applicationWillTerminate並不總是被調用。 這來自Apple的文檔。

此方法使您的應用知道即將終止並完全從內存中清除。 您應該使用此方法為您的應用執行所有最終清理任務,例如釋放共享資源,保存用戶數據和使計時器無效。 此方法的實現大約需要五秒鍾來執行任何任務並返回。 如果該方法在時間到期之前沒有返回,則系統可能會完全終止該過程。 對於不支持后台執行或與iOS 3.x或更早版本鏈接的應用程序,總是在用戶退出應用程序時調用此方法。 對於支持后台執行的應用程序,用戶退出應用程序時通常不會調用此方法,因為在這種情況下,應用程序只是移至后台。 但是,在應用程序在后台運行(未掛起)並且系統出於某種原因需要終止它的情況下,可以調用此方法。

要回答有關為什么未清除數據的問題,也許未調用此方法。 嘗試添加一些日志以檢查是否調用了該方法。

我寧願將此代碼放在AppDelegate內的applicationDidFinishLaunchingWithOptions中 在這種情況下,您可以確保在每次啟動應用程序時都將清除此數據,然后再重新填充它。

對於Swift:

if let bundleId = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundleId)
}

在這里,我們是可選的bundleIdentifier以防止崩潰。

嘗試編寫代碼以清除applicationWillResignActive而不是applicationWillTerminate NSUserDefaults。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM