为 iOS 应用程序存储数据的最佳方法?
Best method to store data for an iOS app?
我想在学习 swift 的过程中开发一个 stock/item 库存应用程序。它基本上是具有物品名称、数量和位置的东西。
eg.
Lightbulbs, 25, Work Van
Switches, 6, Warehouse
当用户输入此数据并按下按钮时,存储此数据并在以后检索它的最佳方法是什么。我知道我可以将其附加到一个数组并显示该数组,但是如果应用程序关闭怎么办?
我应该考虑学习数据库存储吗?我可以将数据保存到 phone 吗?
对于刚刚登录的单个用户,您可以将其存储在UserDefaults
中。但是,如果您必须管理用户列表,请使用 Core Data。
如果要存储的数据很少且不敏感,可以使用UserDefaults
例如,用户姓名、年龄等
对于大量数据,您应该使用 Core Data,这是管理对象的一种好而简单的方法。例如,您有 1000 个项目,每个项目都有一个 属性,您基本上可以为此使用核心数据。如何创建托管对象、存储它们以及稍后如何使用查询检索它们非常简单。
基本上,当您使用核心数据配置项目时,项目会创建一个附加到项目的 sqlite 文件。
有很多关于如何开始使用 Core Data 的教程,如果您对 iOS 有一般的经验,那对您来说将是小菜一碟。
这里有一个很好的教程,可以帮助您在项目中设置核心数据:
https://www.raywenderlich.com/173972/getting-started-with-core-data-tutorial-2
whats the best method of storing this data and retrieving it later.
最佳方法将取决于一系列因素,例如:
- 您要保存多少条记录?
- 您需要将此数据与服务器同步吗?
- 性能有多重要?
- 关于使用Swift和iOS存储数据你知道多少?
- 您要保存的数据发生变化的可能性有多大?
随着时间的推移,所有这些问题的答案都可能会发生变化,随着您了解更多并在应用程序上取得更大的进步,并且可能会更多地了解用户的需求.因此,最好的 保存数据的方法是构建可以让您轻松更改甚至替换数据存储系统的东西,而无需更改应用程序的其余部分。
换句话说,你需要为你的数据存储需求定义一个接口。接口就像一个栅栏,实际的数据存储在一边,其余的另一个应用程序(用户界面、网络等)。
为您的数据存储系统提供一个清晰的界面将使您可以使用最简单的数据存储系统快速启动您的应用程序并运行。您可以将数据存储为字典数组,例如,使用数组方法 write(to:atomically:)
将其全部写入 [=55=] 列表,然后使用 init(contentsOf:)
将其读回。到目前为止,您只描述了对一种记录的需求,每条记录只有几个字段。将数据存储在数组中并将其写入 属性 列表对于数百个甚至数千个条目都可以正常工作;在真正需要重写数据存储系统之前,您可能会重新考虑用户界面,因为没有人喜欢滚动浏览包含数百个项目的列表。
随着您的应用程序的发展,您发现您不想一次将所有数据保存到内存中,或者您希望随应用程序一起发送一些数据并将其与用户输入的数据分开,或者你想加速你的数据存储,你可以编写一个新的符合相同接口的数据存储系统。然后您可以在不影响应用程序其余部分的情况下换入新系统。因此,您可以切换到使用像 Core Data 这样的奇特的东西,或者您可以实现基于服务器的存储,而不必重写应用程序的大块内容。
为您的数据存储系统创建一个清晰的界面也将使编写一组单元测试变得容易,以确保您的数据存储系统完全按照预期的方式工作并且不会中断。并且拥有一组单元测试可以轻松确保您的数据存储系统的未来版本与它所取代的版本一样正确。
这里的其他一些人建议使用 Core Data。 Core Data 很棒,但是使用它 很多 比仅仅从文件中读取数据并在完成后写回更复杂 .使用数组存储数据和使用 Core Data 存储数据之间的区别非常类似于文本文件和关系数据库之间的区别。 Core Data 是一个对象图管理器:它可以存储许多不同类型的对象以及它们之间的关系,它可以存储数千个所有这些对象并非常快速地访问它们。当您开始跟踪库存中物品的图像、每个物品的供应商、购买物品的客户、物品的买卖价格等时,Core Data 将真正简化管理所有这些数据的任务。但是现在尝试学习和使用 Core Data,虽然您的需求非常简单,同时您也在尝试学习一门新语言,但会减慢您的速度而没有任何实际好处。记住 KISS principle 并从简单开始,但要以一种易于发展的方式开始。
您可以根据具体要求使用以下任一方法。
这两者之间有很大的不同。 SQLite 本身就是一个数据库,就像我们有 MS SQL 服务器一样。
然而 CoreData 是一个 ORM(对象关系模型),它在数据库和 UI 之间创建了一个层。它加快了交互过程 因为我们不必编写查询 ,只需使用 ORM 并让 ORM 处理后端。对于大数据的保存或检索,我建议使用 Core Data,因为它能够处理设备处理速度较慢的问题。
结果:
SQLite:
- 具有数据约束功能。
- 对存储在磁盘上的数据进行操作。
- 可以删除 table 和编辑数据而不将它们加载到内存中。
- 与核心数据相比速度较慢。
- 对于复杂的数据结构可以使用SQL
核心数据:
没有Data Constraints,如果需要需要业务实现
逻辑.
在内存中操作。(数据需要从磁盘加载到内存)
如果我们需要删除 table 或更新,则需要加载整个数据。
记录创建速度快。(保存它们可能很耗时)
否sql。只需将数据加载到数组并在该数组中使用。
在我看来;如果您需要多个数据,您的应用设置或用户身份验证信息或类似作品使用 CoreData
如果您有大数据要存储,您需要select众多数据记录之一使用SQLLite。
希望对您有所帮助。
我想在学习 swift 的过程中开发一个 stock/item 库存应用程序。它基本上是具有物品名称、数量和位置的东西。
eg.
Lightbulbs, 25, Work Van
Switches, 6, Warehouse
当用户输入此数据并按下按钮时,存储此数据并在以后检索它的最佳方法是什么。我知道我可以将其附加到一个数组并显示该数组,但是如果应用程序关闭怎么办?
我应该考虑学习数据库存储吗?我可以将数据保存到 phone 吗?
对于刚刚登录的单个用户,您可以将其存储在UserDefaults
中。但是,如果您必须管理用户列表,请使用 Core Data。
如果要存储的数据很少且不敏感,可以使用UserDefaults 例如,用户姓名、年龄等
对于大量数据,您应该使用 Core Data,这是管理对象的一种好而简单的方法。例如,您有 1000 个项目,每个项目都有一个 属性,您基本上可以为此使用核心数据。如何创建托管对象、存储它们以及稍后如何使用查询检索它们非常简单。
基本上,当您使用核心数据配置项目时,项目会创建一个附加到项目的 sqlite 文件。
有很多关于如何开始使用 Core Data 的教程,如果您对 iOS 有一般的经验,那对您来说将是小菜一碟。
这里有一个很好的教程,可以帮助您在项目中设置核心数据:
https://www.raywenderlich.com/173972/getting-started-with-core-data-tutorial-2
whats the best method of storing this data and retrieving it later.
最佳方法将取决于一系列因素,例如:
- 您要保存多少条记录?
- 您需要将此数据与服务器同步吗?
- 性能有多重要?
- 关于使用Swift和iOS存储数据你知道多少?
- 您要保存的数据发生变化的可能性有多大?
随着时间的推移,所有这些问题的答案都可能会发生变化,随着您了解更多并在应用程序上取得更大的进步,并且可能会更多地了解用户的需求.因此,最好的 保存数据的方法是构建可以让您轻松更改甚至替换数据存储系统的东西,而无需更改应用程序的其余部分。
换句话说,你需要为你的数据存储需求定义一个接口。接口就像一个栅栏,实际的数据存储在一边,其余的另一个应用程序(用户界面、网络等)。
为您的数据存储系统提供一个清晰的界面将使您可以使用最简单的数据存储系统快速启动您的应用程序并运行。您可以将数据存储为字典数组,例如,使用数组方法 write(to:atomically:)
将其全部写入 [=55=] 列表,然后使用 init(contentsOf:)
将其读回。到目前为止,您只描述了对一种记录的需求,每条记录只有几个字段。将数据存储在数组中并将其写入 属性 列表对于数百个甚至数千个条目都可以正常工作;在真正需要重写数据存储系统之前,您可能会重新考虑用户界面,因为没有人喜欢滚动浏览包含数百个项目的列表。
随着您的应用程序的发展,您发现您不想一次将所有数据保存到内存中,或者您希望随应用程序一起发送一些数据并将其与用户输入的数据分开,或者你想加速你的数据存储,你可以编写一个新的符合相同接口的数据存储系统。然后您可以在不影响应用程序其余部分的情况下换入新系统。因此,您可以切换到使用像 Core Data 这样的奇特的东西,或者您可以实现基于服务器的存储,而不必重写应用程序的大块内容。
为您的数据存储系统创建一个清晰的界面也将使编写一组单元测试变得容易,以确保您的数据存储系统完全按照预期的方式工作并且不会中断。并且拥有一组单元测试可以轻松确保您的数据存储系统的未来版本与它所取代的版本一样正确。
这里的其他一些人建议使用 Core Data。 Core Data 很棒,但是使用它 很多 比仅仅从文件中读取数据并在完成后写回更复杂 .使用数组存储数据和使用 Core Data 存储数据之间的区别非常类似于文本文件和关系数据库之间的区别。 Core Data 是一个对象图管理器:它可以存储许多不同类型的对象以及它们之间的关系,它可以存储数千个所有这些对象并非常快速地访问它们。当您开始跟踪库存中物品的图像、每个物品的供应商、购买物品的客户、物品的买卖价格等时,Core Data 将真正简化管理所有这些数据的任务。但是现在尝试学习和使用 Core Data,虽然您的需求非常简单,同时您也在尝试学习一门新语言,但会减慢您的速度而没有任何实际好处。记住 KISS principle 并从简单开始,但要以一种易于发展的方式开始。
您可以根据具体要求使用以下任一方法。
这两者之间有很大的不同。 SQLite 本身就是一个数据库,就像我们有 MS SQL 服务器一样。
然而 CoreData 是一个 ORM(对象关系模型),它在数据库和 UI 之间创建了一个层。它加快了交互过程 因为我们不必编写查询 ,只需使用 ORM 并让 ORM 处理后端。对于大数据的保存或检索,我建议使用 Core Data,因为它能够处理设备处理速度较慢的问题。
结果:
SQLite:
- 具有数据约束功能。
- 对存储在磁盘上的数据进行操作。
- 可以删除 table 和编辑数据而不将它们加载到内存中。
- 与核心数据相比速度较慢。
- 对于复杂的数据结构可以使用SQL
核心数据:
没有Data Constraints,如果需要需要业务实现 逻辑.
在内存中操作。(数据需要从磁盘加载到内存)
如果我们需要删除 table 或更新,则需要加载整个数据。
记录创建速度快。(保存它们可能很耗时)
否sql。只需将数据加载到数组并在该数组中使用。
在我看来;如果您需要多个数据,您的应用设置或用户身份验证信息或类似作品使用 CoreData
如果您有大数据要存储,您需要select众多数据记录之一使用SQLLite。
希望对您有所帮助。