繁体   English   中英

卸载应用程序后不会删除 UserDefaults

[英]UserDefaults are not removed after app is uninstalled

我正在运行以下代码

static func setupNewUserNotifications() {

let defaults = UserDefaults.standard

let userHasBeenNotified = defaults.bool(forKey: "userHasBeenNotified")

guard userHasBeenNotified == false else {
    return
}

// SCHEDULE NOTIFICATION 1 HOUR AFTER FIRST USE
let content = UNMutableNotificationContent()
content.title = "Title"
content.body = "Content."
content.sound = UNNotificationSound.default

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3600, repeats: false)

let request = UNNotificationRequest(identifier: "NewUser", content: content, trigger: trigger)

UNUserNotificationCenter.current().add(request)

defaults.set(true, forKey: "userHasBeenNotified")
}

当应用程序发送到后台时,我从 AppDelegate 调用此函数。 这个想法是让通知设置一次。 该代码工作正常。 但是,当我卸载应用程序并重新安装以再次测试时,userHasBeenNotified 的值仍然为真。 我已经在 iPhone 和模拟器上尝试过(设备->擦除所有内容和设置)。

只有当我更改标识符并运行时,我才能让应用程序按预期运行。 但是,如果我卸载并重试,也会发生同样的事情。

为什么卸载后没有删除 UserDefaults?

有没有办法仅在应用程序安装期间运行代码,我可以在其中重置那些 userDefaults 键?

删除应用程序后,NSUserDefaults 可能不会被删除。 解决方案是:

  • 你可以做一个按钮之类的东西来清理本地存储
let defaults = UserDefaults.standard

defaults.set(true, forKey: "userHasBeenNotified")

let userHasBeenNotified = defaults.bool(forKey: "userHasBeenNotified")

if userHasBeenNotified == true
{
   print("USER HAS BEEN NOTIFIED")
   defaults.set(nil, forKey: "userHasBeenNotified")
}

// 现在试试

if userHasBeenNotified == true
{
   print("USER HAS BEEN NOTIFIED")
}
else
{
   print("USER DEFAULTS FOR 'userHasBeenNotified' HAS NO VALUE")
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM