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

时间:2014-09-26 12:01:36

标签: ios ios8 nsuserdefaults udid

目标:

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

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

上下文

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

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

我意识到我可以采用一系列措施来确定我的参考数据加载是否完整且是最新的。我的目标是确定我的应用程序的安装/卸载之间是否可以轻松确定。

一旦安装(加载)参考数据,这不是故事的结尾,因为新补丁将存在并且基于它们的时间戳,我将需要确定是否忽略或是否进行更新或创建风格导入。

接受调查的方法:

  1. UDID替换。post说明了如何生成自己的UDID,如替换。在引用的上下文中,此值可以在卸载时更改的事实被视为否定。虽然,在我看来,这将是积极的。然后,我可以将所有特定于安装的密钥嵌套在由此唯一标识符键入的字典后面。但是,如果应用程序安装在同一个开发人员至少有一个应用程序的设备上,则唯一标识符将在卸载/重新安装周期中持续存在。
  2. 检测卸载后重新安装。这个我找不到准备好的答案。 是否有更多通用的方式让应用程序检测到它是新安装的,将其与卸载后的重新安装区分开来?
  3. 我可能会采用的方法:

    • 我认识到NSUserDefaults是默认的,意味着很长寿,所以很可能,我必须构建一些我自己的逻辑来检测这种情况。
    • 由于我使用的是Core Data,我可能会创建一个存储这些参考数据时间戳的实体,而不是使用NSUserDefaults。这样,一个新的空数据库是一个赠品,所有参考数据都需要一个新的负载。
      • 我正在构建一个更通用的JSON - > Core Data导入程序,我可以在具有类似参考数据需求的应用程序中使用它。因此,我希望避免将内容绑定到Core Data实例并利用NSUserDefaults。
    • 开发后阶段,我将打包一个SQLite数据库并复制到位,而不是将平面文件导入数据库。

2 个答案:

答案 0 :(得分:2)

卸载应用程序时会自动清除NSUserDefaults,如果您卸载应用程序,它们永远不会保留。因此,当您重新安装应用程序时,您无需检测到应用程序已卸载,NSUserDefaults将为空。

如果您希望在应用安装之间保留值,则可以使用KeyChain。

答案 1 :(得分:0)

应用程序只能读取/写入自己的属性列表文件,而不是使用NSUserDefaults,这个文件会因卸载而被吹走。

我们可以在该属性列表中存储时间戳以便首次启动,以便应用程序可以确定何时应用此当前安装。 NSUserDefaults数据库中的相同密钥将代表应用程序的首次安装。两个相似但不同的信息。

结合这两者,我们可以在NSUserDefaults中存储一个应用完全重新安装次数的计数,如果我们想知道的话。

除此之外:写出问题肯定有助于在自己的脑海中澄清问题!