gpt4 book ai didi

ios - 下载、保存到核心数据、获取和显示?还是下载、显示然后保存?

转载 作者:可可西里 更新时间:2023-11-01 02:01:27 24 4
gpt4 key购买 nike

我正在构建一个从 WordPress 博客网站获取帖子并显示在 tableView 上的应用程序。每个表格 View 单元格显示帖子图像、标题和摘录文本。那是一个类(class)项目,需要使用核心数据。所以我的问题是,为了更好的用户体验,我应该在下载后直接在单元格上显示图像,然后保存到商店,还是应该保存到商店,获取,然后显示?

一些注意事项:

  • 当应用程序启动时,它会检查互联网连接,如果连接建立,商店将被清理并下载最新的帖子。

  • 它将一次下载 5 个帖子

  • 向上滚动将执行旧帖子的下载。

最佳答案

这是一个意见导向的问题。我能做的最好的事情就是让您知道我过去是如何设计我的应用程序来处理这种情况的。

我的解决方案:

  1. 使用 NSFetchedResultsController 从核心数据中读取数据,并使用 NSFetchedResultsController 的 fetchedObjects 数组作为您的 UITableViewController 的数据源或UICollectionViewController

  2. 实现 NSFetchedResultsController 的委托(delegate),当 Core data 中的数据发生变化时将被触发。这样您就可以高效地更新您的 CollectionViewTableView 并尽快在 UI 上显示数据更改。

  3. 使用后台上下文修改数据,这样您的主线程就会空闲并且应用程序保持响应。

  4. 为了创建背景上下文,我更喜欢父子上下文架构而不是传统的多上下文架构。 parent child context 架构易于理解,保持代码整洁。

  5. 切勿将图像保存到核心数据中。而是将下载的图像保存到文档目录,并将下载文件的相对链接保存在 CoreData 中。

  6. 记住我说的是删除文件的相对路径而不是绝对文件。因为您的应用程序文件夹/沙箱路径在终止和重新启动应用程序时会发生变化。在核心数据中保存文件的绝对路径是搞砸逻辑的完美方法。

  7. 不用担心保存数据到核心数据的延迟。延迟可能只有几分之一秒,您甚至不会注意到。将数据保存在数组中,然后从核心数据中获取数据并更新数组是完全不行的。

  8. 就个人而言,使用数组来保存数据而不是 NSFetchedResultsController 的 fetchedObjects 是一个完整的 NO。为什么 ?很简单,Array 不是线程安全的,因为您将在后台线程进行 Web 服务调用和解析数据,您可能有多个线程同时访问 Array。由于 Array 不是线程安全的,您可能很容易进入数据不一致的状态,也可能导致崩溃。

  9. 最后使用像 SDWebImage 这样的库来高效地加载图像。 SDWebImage 不仅会加载图像,还会通过快速加载图像将它们缓存在不同级别(在 RAM 和硬盘中)。

  10. 如果您打算使用分页来获取数据,请使用 scrollView 的 scrollViewDidScroll 委托(delegate)来确定用户何时滚动到表/collectionView 的底部并进行网络服务调用并获取数据在后台线程更新核心数据。一旦更新 mainObjectContext,NSFetchedResults Controller 的委托(delegate)将被触发,您应该能够立即更新 UI。

关于ios - 下载、保存到核心数据、获取和显示?还是下载、显示然后保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46015237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com