我应该在哪里存储Xcode Swift应用程序的初始数据?

时间:2019-06-09 18:11:21

标签: json swift xcode core-data userdefaults

我正在使用闪存卡类型的应用程序。数据是字典的数组,即使在首次启动应用程序时,字典也必须存在。

但是,随着时间的流逝,应用程序中的数据将需要更新-现有记录将被修改或新记录将被添加。我有一个外部python脚本,该脚本生成JSON文件并将其上传到我的Web服务器。我的应用需要该文件。

每次启动该应用程序时,我的想法是检查Web服务器。如果那里的数据较新,那么我将下载,保存并使用它。如果没有(或者无法访问Web服务器),我将使用应用程序中已经存在的数据,这些数据可能是初始数据,也可能是以前下载并保存的较新数据。

所以我的问题是:

我将在哪里存储初始数据,将要最终下载的数据存储在哪里?为了避免浪费空间,我宁愿不包含一个JSON文件,该文件仅被读取一次,然后被保存到UserDefaults中,然后再也不会被引用。

是否可以使用预先存在的UserDefaults启动应用程序? (似乎不太可能。)如果我在应用程序中包含JSON文件,是否可以将文件的内容替换为我下载的新文件?还是我需要使用Core Data?

2 个答案:

答案 0 :(得分:1)

  

是否可以使用预先存在的UserDefaults启动应用程序? (似乎不太可能。)

实际上,有 这样的方法(称为注册默认值),但这没关系。作为字典基础的JSON不是用户默认值,并且永远不会存储在UserDefaults中,因此请彻底清除它。 UserDefaults与这个故事无关。

相反,您将按照建议在应用程序捆绑包中包含JSON的初始版本,然后将其复制到启动上的Documents目录中,如果没有此目录或更高版本已存在。 (您可以使用命名方案来跟踪版本。)随后,如果您在网络上发现了较新的版本,则只需覆盖或从“文档”中删除现有文件,然后保存较新的文件即可。

所有这些假设都假定字典足够小,您可以一次将其全部加载到内存中,因为这就是读取JSON文件时要做的事情。如果您担心无法通过这种方式进行扩展,并且需要一次仅加载数据的一部分的功能,那么 可能就是原因而是使用SQLite或(抖动)Core Data,因为这些方法使您可以查询磁盘上的数据库,而无需将整个数据库立即加载到内存中。假设您使用了SQLite。然后,您将在应用程序捆绑包中包含SQLite文件的初始版本,然后将其保存到文档中;否则,您将包括JSON版本,并在首次启动时将初始SQLite文件构建到文档中;随后,当您在线发现修订后的数据时,将使用SQL命令来修改文档中的SQLite文件。

答案 1 :(得分:1)

在项目中添加只能读取一次的json文件不是一个坏主意,因为json文件将是一个简单的文本文件,不会占用任何可观的空间。

但是,由于您以后想要修改该json文件,因此更好的方法是在应用启动时首先将json文件从应用程序捆绑包复制到任何可用的沙箱文件夹中(这样您以后就可以修改该文件)。

稍后,如果可以从Web服务器获得数据,则可以检查和修改文件。并稍后阅读文件的内容。