Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 我应该在哪里存储Xcode Swift应用程序的初始数据?_Json_Swift_Xcode_Core Data_Userdefaults - Fatal编程技术网

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

Json 我应该在哪里存储Xcode Swift应用程序的初始数据?,json,swift,xcode,core-data,userdefaults,Json,Swift,Xcode,Core Data,Userdefaults,我正在开发一个闪存卡类型的应用程序。数据是一组字典,即使是第一次启动应用程序时也必须存在这些字典 但是,随着时间的推移,应用程序中的数据将需要更新-要么修改现有记录,要么添加新记录。我有一个外部python脚本,它生成一个JSON文件并将其上传到我的web服务器。我的应用程序需要这个文件 每次启动应用程序时,我的想法是检查web服务器。如果那里的数据更新了,那么我将下载、保存并使用它。如果没有(或者无法访问web服务器),我将使用应用程序中已有的数据,这些数据可能是初始数据或以前下载并保存的较新

我正在开发一个闪存卡类型的应用程序。数据是一组字典,即使是第一次启动应用程序时也必须存在这些字典

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

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

因此,我的问题是:

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

有没有办法使用预先存在的用户默认值启动应用程序?(似乎不太可能。)如果我在我的应用程序中包含一个JSON文件,我可以用我下载的新文件替换该文件的内容吗?还是我需要使用核心数据

有没有办法使用预先存在的用户默认值启动应用程序?(似乎不太可能。)

实际上有这样一种方法(称为注册默认值),但这并不重要。作为字典基础的JSON不是用户默认值,也永远不会存储在UserDefaults中,所以请将其完全从您的脑海中抹去。UserDefaults与此故事无关

相反,您应该按照您的建议将JSON的初始版本包含在应用程序包中,并在启动时将其复制到文档目录(如果没有此版本或更高版本)。(您可以使用命名方案跟踪版本控制。)随后,如果您在web上发现较新的版本,您只需覆盖或从文档中删除现有文件并保存较新的文件

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

有没有办法使用预先存在的用户默认值启动应用程序?(似乎不太可能。)

实际上有这样一种方法(称为注册默认值),但这并不重要。作为字典基础的JSON不是用户默认值,也永远不会存储在UserDefaults中,所以请将其完全从您的脑海中抹去。UserDefaults与此故事无关

相反,您应该按照您的建议将JSON的初始版本包含在应用程序包中,并在启动时将其复制到文档目录(如果没有此版本或更高版本)。(您可以使用命名方案跟踪版本控制。)随后,如果您在web上发现较新的版本,您只需覆盖或从文档中删除现有文件并保存较新的文件


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

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

但由于您希望稍后修改该json文件,因此更好的方法是在应用程序启动时首先将该json文件从应用程序包复制到任何可用的沙盒文件夹中(这将允许您稍后修改该文件)


稍后,如果Web服务器上有可用数据,则可以检查和修改该文件。稍后再阅读文件内容。

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

但由于您希望稍后修改该json文件,因此更好的方法是在应用程序启动时首先将该json文件从应用程序包复制到任何可用的沙盒文件夹中(这将允许您稍后修改该文件)


稍后,如果Web服务器上有可用数据,则可以检查和修改该文件。请稍后阅读文件内容。

似乎与我所说的完全相同。似乎与我所说的完全相同。谢谢。奇怪的是,无论是我的JSON文件(大约100KB)还是SQL,最终的结果都是有两个版本:原始版本和数据库中的版本