【问题标题】:Best approach to save images in swift?快速保存图像的最佳方法?
【发布时间】:2020-03-01 18:35:12
【问题描述】:

我目前正在为 iOS 开发一个应用程序。该应用程序是关于创建一个帐户,然后可以邀请几个朋友加入一个群组。

一旦人们加入了群组,您就可以提交一种“信息”。每个组每天大约会发送 5 次此信息。

信息将显示在“历史”视图中,也就是表格视图。它们会像这样出现在单元格中:

  1. 成员的图像。
  2. 一种文字
  3. 带时间的日期。

在提交表单的那一刻,图片的 Firebase 存储 URL 被发送到 Firebase Realtime,其中数据库保存如下数据类型:imageUrl、文本和日期。

当我从 Firebase 下载数据时,所有图像都会再次下载,我注意到 Firebase 存储非常过载。我超过了每天不到 1 小时的限制。

let memberImagePath = dataArray[indexPath.row].memberImage
cell.memberImage.downloaded(from: memberImagePath)

所以我想知道如何改进这一点?如何使图像只下载一次,然后以不同的方式保存?部分是为了提高应用程序的性能,但也不要超过限制。

我基本上希望所有组成员的图像都放在正确的位置(不仅仅是我自己)。

因为当您在群组中时,群组中的每个成员都可以看到历史记录,其中包括图像、文本和日期。所以不知何故,我需要下载一次图像并将它们保存在不同的地方。

请注意,每次使用都需要更新。就像如果将新成员添加到组中,他/她的图像必须在组中每个人的设备上更新。所以在 UserDefaults 中保存数据可能不是一种选择,对吧?

我希望你明白我在寻找什么。谢谢。

【问题讨论】:

  • 您如何将图像转换为数据?您是否将它们保存为PNG? PNG 非常大,无法通过网络发送。您可以在上传图像之前获取图像 JPEG 表示数据和/或按比例缩小它们。您还可以将它们转换为 HEIC 以节省更多数据存储/带宽,但这需要 iOS 11 或更高版本。
  • @LeoDabus 我将它们保存为 JPEG。
  • 请注意,您也可以调整它们的大小。您不需要它们的完整尺寸来显示它们。
  • 当我从 Firebase 下载数据时,所有图像都会再次下载 - 为什么?而这个 cell.memberImage.downloaded(from: memberImagePath) 不会是一个好的解决方案。 TableView 委托方法应该是快速,代码量最少。如果您在用户滚动表格时尝试下载数据,那将无法正常工作。您需要一次下载一大块数据来填充您的数据源 - 比如说 100 条“记录”,所以分页可能是要走的路。但问题是没有足够的代码来真正理解这个问题。

标签: ios swift firebase firebase-storage


【解决方案1】:

您可以将数据存储在文档目录中。查看FileManager 课程。只需检查文件是否存在于设备上,如果不存在,则下载它。但是,如果图像可以更新,那么您将需要某种版本控制系统来确保每个设备都有最新的图像。

【讨论】:

  • 它们不能完全更新。但是更多的用户可以加入该组,这会导致问题.. 对吗?我肯定会去看看 FileManager 类,不知道那个。
  • 我不确定这会如何导致问题。您可以为每个用户拥有一个单独的图像文件。您到底关心什么?
  • @Putte 这里是否建议将所有数据下载到文档目录并将其作为某种缓存存储在本地?那是行不通的(好吧); Firebase 是一个实时更新、事件驱动的数据库;如果数据发生变化,无论如何每次都必须重新下载和重新读取,这会削弱该功能。此外,Firebase 已经提供了Offline Persistence。此策略还有其他问题,即存储是无限的,而设备则不是,因此很容易被淹没。
猜你喜欢
  • 2013-08-10
  • 2018-04-10
  • 2022-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 2019-11-01
相关资源
最近更新 更多