Ios UserDefaults.standard.removeObject(forKey:)是否可能失败?

Ios UserDefaults.standard.removeObject(forKey:)是否可能失败?,ios,swift,Ios,Swift,我试图在我正在开发的一个应用程序中重现一个奇怪的错误,而出现错误的唯一可能原因似乎是UserDefaults有时无法删除对象 UserDefaults.standard.removeObject(forKey: Constant.name1) UserDefaults.standard.removeObject(forKey: Constant.name2) 当我使用上面的代码进行测试时,它在我这方面工作得很好,但似乎在某些情况下(iOS版本?内存条件?其他?),该代码对我们的一些用户失败,并

我试图在我正在开发的一个应用程序中重现一个奇怪的错误,而出现错误的唯一可能原因似乎是
UserDefaults
有时无法删除对象

UserDefaults.standard.removeObject(forKey: Constant.name1)
UserDefaults.standard.removeObject(forKey: Constant.name2)
当我使用上面的代码进行测试时,它在我这方面工作得很好,但似乎在某些情况下(iOS版本?内存条件?其他?),该代码对我们的一些用户失败,并且应用程序永远保留这些用户默认值

这可能吗


我在OpenRadar上发现一些雷达指向这样一个事实:
UserDefaults
没有正确保存,但没有确认它是否真的发生了。

在删除键后调用这个方法UserDefaults.standard.synchronize()。在官方文档中,它说synchronize()是过时的
此方法是不必要的,不应该使用。
我的观点是,苹果现在确实会不时进行同步,但它们在进入后台时不再同步。这意味着现在可能会发生以下情况:苹果会同步用户默认值,您编写一个新值,应用程序进入后台(用户默认值不同步),应用程序因任何原因(例如由于内存压力)被终止。现在您的值未被保存或更新。因此,当应用程序进入后台时,只需进行同步。无需在任何其他时间调用同步!不要一直调用同步,它将终止应用程序performance@DixitAkabari嗯,当苹果明确表示“这种方法是不必要的,不应该使用。”,你有你的意见……苹果wins@Mathbl这是否可能是多线程问题,例如从两个线程同时删除/添加/更改这些设置?请在删除密钥后调用此方法UserDefaults.standard.synchronize()。在官方文档中,它表示synchronize()是过时的
此方法是不必要的,不应该使用。
我的观点是,苹果现在确实会不时进行同步,但它们在进入后台时不再同步。这意味着现在可能会发生以下情况:苹果会同步用户默认值,您编写一个新值,应用程序进入后台(用户默认值不同步),应用程序因任何原因(例如由于内存压力)被终止。现在您的值未被保存或更新。因此,当应用程序进入后台时,只需进行同步。无需在任何其他时间调用同步!不要一直调用同步,它将终止应用程序performance@DixitAkabari嗯,当苹果明确表示“这种方法是不必要的,不应该使用。”,你有你的意见……苹果wins@Mathbl是否可能是多线程问题,例如从两个线程同时删除/添加/更改这些设置?