如何在Swift上本地存储图像和字符串

时间:2017-10-07 21:04:50

标签: swift

我正在创建一个应用程序,用户可以在其中拍照并添加标题和说明。但现在我需要存储图片和标题。我已经尝试制作一个包含标题,描述和图像属性的对象。

完成后,我使用UserDefaults保存一系列自定义对象及其中的信息。我的想法是在另一个视图中显示一个表格视图,其中包含用户在单元格上拍摄的所有内容和图片。我尝试使用用户默认值获取信息。它一直运行良好,直到用户保存太多图片。当带有tableview的viewController加载时,我的应用程序变慢,最终崩溃。

我想问题是当我用所有自定义对象加载所有数组时,所有图片都被加载到内存中,尽管它们没有被用户显示。所以我认为这不是制作我想做的最佳方式。

有没有什么方法可以更好地制作我正在制作的内容或更有效地存储数据,并在不使用设备的所有内存的情况下在tableview中使用它?

我再次从0开始制作应用程序。

您能告诉我如何有效地存储数据和图像吗?

2 个答案:

答案 0 :(得分:0)

有几种方法可以永久存储设备上的用户数据,以便在应用和手机重启后能够存活。 NSUserDefaults通常用于少量数据,例如用户首选项。

当需要存储大量数据时,特别是像照片这样的大型二进制对象时,您需要决定要使用哪种设计。一种选择:

  • 将所有照片存储在应用文档的一个目录中,然后使用一些简单的查找存储(可能是Core Data,或SQLite,甚至是平面文件)来索引照片及其元数据。或者,如果您不关心索引,则可以从目录中读取文件名列表,并按时间对其进行排序。

您可能遇到的另一个问题是您尝试为用户一次性加载所有的照片。正如您所发现的,一旦您拥有超过一些照片,这个系统就会崩溃。您需要一些机制一次只加载几张照片,最好只是那时用户需要显示的照片。

因此,例如,如果您要在桌面视图中显示照片,则只需要在任何给定时间加载表格中可见的10-15张照片。

答案 1 :(得分:-1)

存储数据时,你基本上有两个选项 - UserDefaults或CoreData(或Realm,但我不喜欢它,即使在某些情况下它比CoreData更好)...

当没有太多要保存的数据时,建议使用第一个...对于使用更多数据进行操作,我会使用数据库 - CoreData ...

对于您的操作,您可以使用CoreData和NSFetchedResultsController(专门用于从数据库中获取对象)...

您可以阅读FetchedResultsController doc here ...和核心数据基础知识here

祝你好运!