ios - 为 iOS 应用程序存储数据的最佳方法?

标签 ios swift store

<分区>

我想在学习 Swift 的过程中开发一个库存/元素库存应用程序。它基本上是具有元素名称、数量和位置的东西。

eg.

Lightbulbs, 25, Work Van

Switches, 6, Warehouse

当用户输入此数据并按下按钮时,存储此数据并稍后检索的最佳方法是什么。我知道我可以将其附加到一个数组并显示该数组,但如果应用关闭怎么办?

我应该考虑学习数据库存储吗?我可以将数据保存到手机吗?

最佳答案

whats the best method of storing this data and retrieving it later.

最佳方法将取决于一系列因素,例如:

  • 您想保存多少条记录?
  • 您需要将此数据与服务器同步吗?
  • 性能有多重要?
  • 您对使用 Swift 和 iOS 存储数据了解多少?
  • 您要保存的数据发生变化的可能性有多大?

随着时间的推移,所有这些问题的答案都可能会发生变化,因为您会了解更多信息并在应用程序上取得更多进展,并且可能会更多地了解用户的需求。因此,保存数据的最佳方法是构建一些东西,让您可以轻松更改甚至替换数据存储系统,而无需更改应用程序的其余部分。

换句话说,您需要为您的数据存储需求定义一个接口(interface)。该接口(interface)就像一个栅栏,一侧是实际的数据存储,而应用程序的其余部分(用户界面、网络等)。

为您的数据存储系统提供清晰的界面将使您能够使用最简单的数据存储系统快速启动和运行您的应用程序。您可以将数据存储为字典数组,例如,使用 Array 方法 write(to:atomically:) 将其全部写入属性列表,然后使用 init 将其读回(内容:)。到目前为止,您只描述了对一种记录的需求,每条记录只有几个字段。将数据存储在数组中并将其写入属性列表对于数百个甚至数千个条目都可以正常工作;在真正需要重写数据存储系统之前,您可能会重新考虑用户界面,因为没有人喜欢滚动浏览包含数百个项目的列表。

随着您的应用的发展,您发现您不想一次将所有数据保存到内存中,或者您希望随应用传送一些数据并将其与用户输入的数据分开,或者你想加快你的数据存储,你可以编写一个新的符合相同接口(interface)的数据存储系统。然后您可以在不影响应用程序其余部分的情况下换入新系统。因此,您可以切换到使用像 Core Data 这样奇特的东西,或者您可以实现基于服务器的存储,而无需重写应用的大块内容。

为您的数据存储系统创建一个清晰的界面也将使编写一组单元测试变得容易,以确保您的数据存储系统完全按照预期的方式工作并且不会中断。进行一组单元测试可以轻松确保您的数据存储系统的 future 版本与它所取代的版本一样正确。


这里的其他一些人建议使用 Core Data。 Core Data 很棒,但使用它比从文件中读取数据并在完成后将其写回很多要复杂。使用数组存储数据和使用 Core Data 存储数据之间的区别非常类似于文本文件和关系数据库之间的区别。 Core Data 是一个对象图管理器:它可以存储许多不同类型的对象以及它们之间的关系,它可以存储数千个所有这些对象并非常快速地访问它们。当您开始跟踪库存中元素的图像、每个元素的供应商、购买元素的客户、元素的买卖价格等时,Core Data 将真正简化管理所有这些数据的任务。但是现在尝试学习和使用 Core Data,虽然您的需求非常简单,同时您也在尝试学习一门新语言,但会减慢您的速度而没有任何实际好处。记住 KISS principle从简单开始,但要采用易于发展的方式。

关于ios - 为 iOS 应用程序存储数据的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51219869/

相关文章:

c# - VSIX 凭据的存储位置 - Visual Studio 2017 扩展

ios - Cocoa Touch Objective-C Framework 中的 Swift 类

ios - 如何快速统计屏幕被触摸的次数?

ios - 将IAP存储在UserDefaults中,这样用户无需每次按“可购买”按钮即可恢复购买

ios - 更改堆栈 View 轴时打破约束

javascript - redux 存储的最大内存大小是多少?

ios - 根据 API 的结果选择 Tableview 单元格

ios - 适用于 iOS 的 AdMob 错误 : Llibrary not found for -lGoogleAdMobAds

swift - 未找到框架 FBLPromises(Swift 包管理器)

ExtJs 模型代理与商店代理