在沙盒 mac 应用程序卸载后删除 NSUserDefaults
Remove NSUserDefaults after sandboxes mac app uninstall
我有一个沙盒应用程序,它是从 Mac AppStore 安装的。
它写入NSUserDefaults
。我原以为 NSUserDefaults
会在应用程序被删除时消失(与 iOS 沙盒应用程序的情况相同)。
然而,NSUserDefaults
却挥之不去。因此,如果用户重新安装该应用程序,he/she 仍然可以访问 NSDefaults 中的相同内容(在我的情况下,这是负面影响)。
我想知道是否有一种方法(专门针对 AppStore 沙盒应用程序)在卸载时删除 NSUserDefaults
。
由于 macOS 通常允许您简单地通过将应用程序拖到废纸篓来删除应用程序,而不是让您 运行 成为卸载程序,因此无法强制执行诸如删除用户默认值之类的任务 运行 卸载时。
我个人认为这是一个功能,而不是错误;如果作为用户,我的应用程序已损坏并需要卸载并重新安装它,这不应该迫使我必须在此过程中重置与该应用程序关联的所有数据。但是YMMV.
如果这确实是个问题,您可以执行一些操作,例如在用户默认值中存储 NSURLContentModificationDateKey
或 NSURLAddedToDirectoryDateKey
的应用程序值,并在应用程序启动时测试它是否匹配。如果没有,则该应用程序可能已重新安装,您可以提议取消默认数据。不过,我真的建议在执行此操作之前设置一个对话框询问用户,因为在没有警告的情况下销毁一个人的数据是相当不 Mac 的,并且与您的许多用户所期望的相反(并且因为否则,每次他们将应用程序更新到更高版本时,您都会破坏他们的数据。
我有一个沙盒应用程序,它是从 Mac AppStore 安装的。
它写入NSUserDefaults
。我原以为 NSUserDefaults
会在应用程序被删除时消失(与 iOS 沙盒应用程序的情况相同)。
然而,NSUserDefaults
却挥之不去。因此,如果用户重新安装该应用程序,he/she 仍然可以访问 NSDefaults 中的相同内容(在我的情况下,这是负面影响)。
我想知道是否有一种方法(专门针对 AppStore 沙盒应用程序)在卸载时删除 NSUserDefaults
。
由于 macOS 通常允许您简单地通过将应用程序拖到废纸篓来删除应用程序,而不是让您 运行 成为卸载程序,因此无法强制执行诸如删除用户默认值之类的任务 运行 卸载时。
我个人认为这是一个功能,而不是错误;如果作为用户,我的应用程序已损坏并需要卸载并重新安装它,这不应该迫使我必须在此过程中重置与该应用程序关联的所有数据。但是YMMV.
如果这确实是个问题,您可以执行一些操作,例如在用户默认值中存储 NSURLContentModificationDateKey
或 NSURLAddedToDirectoryDateKey
的应用程序值,并在应用程序启动时测试它是否匹配。如果没有,则该应用程序可能已重新安装,您可以提议取消默认数据。不过,我真的建议在执行此操作之前设置一个对话框询问用户,因为在没有警告的情况下销毁一个人的数据是相当不 Mac 的,并且与您的许多用户所期望的相反(并且因为否则,每次他们将应用程序更新到更高版本时,您都会破坏他们的数据。