我正在运行以下代码
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密钥的方式来运行代码?
答案 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")
}