【问题标题】:Swift - Preload and update data from database with CoreDataSwift - 使用 CoreData 从数据库中预加载和更新数据
【发布时间】:2020-01-01 02:59:15
【问题描述】:

我有一个包含产品的大型数据库。我正在考虑在 iOS 应用启动时从数据库中获取所有产品,然后使用 CoreData 保存和重组数据,你关注了吗?

但是,数据库中的产品,尤其是价格可能会在不同日期之间发生变化。因此,我认为每次打开应用程序时都需要预加载数据。这将需要一段时间,尤其是在 Internet 速度较慢的情况下。我想知道是否有更好的解决方案?

谢谢, 卡斯珀

【问题讨论】:

  • 您可以在用户使用应用程序时异步加载数据。另一种尝试是仅在用户离线时更新数据库中已更新的项目。第二个建议可以通过 mysql 和推送通知轻松实现。
  • 嗨,保罗,感谢您的回答!两种选择听起来都不错。你有任何关于如何实现它们的参考或提示吗?该数据库是 1000000 行需要解析的 XML 代码,包含大约 6000 张高分辨率图像。所以我想我只会存储数据,而不是图像。或者您对此有何看法?

标签: ios swift database core-data


【解决方案1】:

想想哪些数据会改变,哪些数据不会……

考虑将您的数据分组 - 定期更改的组、不经常更改的组和从不更改的组。

然后您就可以根据组为您的应用上传数据。

哪些数据可以上传一次:

  • 产品名称?
  • 产品图片?

每天可以上传哪些数据:

  • 产品价格?

哪些数据可能不经常上传:

  • 产品说明?
  • 产品图片(何时更改)?

也许还会有新产品上传?

我建议您考虑使用缩略图和全尺寸图像。

作为指导,缩略图应该是小尺寸和文件大小...可能是 300 x 300 像素并且小于 150kb。缩略图图像可以使用 Core Data 保存为 Data 类型(在 SQLite 中作为 blob 持久化)。

全尺寸(大文件大小)图像可以使用 Core Data 进行持久化,但是有不同的方法可以实现这一点。

在 SO 和其他网站上都有很多关于使用 Core Data 存储大文件大小图像的文章。

我的偏好是将图像文件保存到应用沙箱中的自定义应用程序目录/文件夹中,该目录/文件夹未备份我的 iTunes 或 iCloud,并将对该图像文件的引用(作为文件路径)保存为 String核心数据模型中的属性。通过这种方式,您可以将图像文件保存在本地,并且仅在必要时上传更改。

因此,通过使用不同的数据组,您还可以将上传内容拆分成块……那些需要的:

  • 应用程序运行时(例如产品名称);
  • 在应用生命周期的早期(例如缩略图);
  • 在背景中(例如全尺寸图片)。

【讨论】:

    猜你喜欢
    • 2018-08-12
    • 1970-01-01
    • 2020-04-19
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多