ios - 在卸载/重新安装应用程序之间以编程方式清除 NSUserDefaults 数据库

标签 ios ios8 nsuserdefaults udid

目标:

在卸载应用后清除应用的 NSUserDefaults。相反,在重新安装应用程序时,让它忽略之前可能已存储的任何 NSUserDefaults。也就是说,能够检测到那些 NSUserDefaults 属于后来卸载的早期安装。

请注意,卸载和重新安装的版本可能是完全相同的构建/版本号。

上下文:

我正在存储一些代表加载特定引用数据文件的时间戳的键值对,因此我的应用程序可以简单地跳过重新加载未更改的引用数据。

在开发过程中,我有时会从模拟器或设备中删除应用程序,但不想重置所有设置以清除 NSUserDefaults

我意识到我可以采取很多措施来确定我的引用数据加载是否完整和最新。我的目标是确定在安装/卸载我的应用程序之间是否可以轻松确定这一事实。

安装(加载)引用数据后,故事还没有结束,因为新补丁将存在并且基于它们的时间戳,我需要确定是忽略还是进行更新或创建样式导入。

调查的方法:

  1. UDID 替换。post解释了如何生成自己的 UDID 之类的替换。在引用的上下文中,这个值可以在卸载时更改的事实被视为负面的。而在我看来,这将是积极的。然后我可以将我所有的安装特定键嵌套在一个由这个唯一标识符键入的字典后面。但是,如果一个应用程序安装在一台设备上,并且至少还有一个来自同一开发者的应用程序,则唯一标识符将在卸载/重新安装周期中持续存在。
  2. 卸载后检测重新安装。我找不到现成的答案。 是否有任何更通用的方法让应用检测到它是全新安装的,并将其与卸载后重新安装区分开来?

我可能采用的方法:

  • 我认识到 NSUserDefaults 是默认的,意味着长期存在,因此我很可能必须构建一些自己的逻辑来检测这种情况。
  • 因为我使用的是 Core Data,所以我可能会创建一个实体来存储这些引用数据时间戳,而不是使用 NSUserDefaults。这样,一个新的空数据库就表明所有引用数据都需要重新加载。
    • 我正在尝试构建一个更通用的 JSON--> 核心数据导入器,我可以在具有类似引用数据需求的应用程序中使用它。因此,我希望避免将事物绑定(bind)到 Core Data 实例并利用 NSUserDefaults。
  • 在后期开发阶段,我将打包 SQLite 数据库并复制到位,而不是将平面文件导入数据库。

最佳答案

NSUserDefaults 会在应用程序卸载时自动清除,如果您卸载应用程序,它们将永远不会保留。因此,您不需要任何东西来检测应用程序是否已卸载,当您重新安装应用程序时,NSUserDefaults 将为空。

如果您希望值在应用程序安装之间保持不变,您可以使用 KeyChain。

关于ios - 在卸载/重新安装应用程序之间以编程方式清除 NSUserDefaults 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26059084/

相关文章:

ios - 在越狱设备中可以看到数据库文件吗?

swift - 如何设置关系和获取数据

ios - 保存 iOS 8 自定义键盘的首选项

ios - NSUserDefaults 在 iOS7 中不保存?

ios - 在 UITextView 中将框架高度设置为零

iOS 在容器内移动 View 会混淆触摸区域

ios - 为什么 Label Outlets 不能连接到 UITableViewCell 类

XCode 6 GM 占用磁盘空间和内存

arrays - type 'any' has no subscript members error with map

ios - 影响所有 TableView 标题中按钮的操作