卸载应用后不会删除UserDefaults

时间:2020-10-30 14:52:33

标签: ios swift nsuserdefaults

我正在运行以下代码

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的值仍为true。我已经在iPhone和模拟器上尝试过(设备->删除所有内容和设置)。

仅当我更改标识符并运行时,我才能使该应用程序正常运行。但是,如果我卸载并重试,也会发生同样的事情。

为什么卸载后未删除UserDefaults?

是否只有在安装应用程序时才能重置那些userDefaults密钥的方式来运行代码?

2 个答案:

答案 0 :(得分:0)

删除应用后,

NSUserDefaults可能不会被删除。 解决方案是:

  • 您可以按下按钮或进行其他操作,以清除本地存储空间

答案 1 :(得分:0)

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")
}