![](/img/trans.png)
[英]Firebase: How to clear specific data from firebase when user kill app?
[英]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.