gpt4 book ai didi

ios - 核心数据 + AFNetworking + UI 更新(响应性)

转载 作者:行者123 更新时间:2023-12-01 16:49:25 25 4
gpt4 key购买 nike

这是场景:

我正在写 DownloadManager ,允许用户下载、暂停、取消、全部下载和全部暂停。 DownloadManager是单例,使用 AFNetworking下载文件。它有自己的私有(private)托管对象上下文,因此用户可以自由地使用应用程序的其他部分(通过添加、编辑、删除)核心数据对象。我有一个核心数据实体 DownloadInfo存储下载信息即fileURL , fileSize , bytesRead等。DownloadManager更新DownloadInfo中的下载进度(每个文件一个)。

我有一个 DownloadManagerViewController使用 NSFetchedResultsController向用户显示下载状态。此下载 View Controller 正在使用主托管对象上下文。

现在假设我在下载队列中有 20 个文件。假设只允许 3 个并发下载。下载管理器应该下载文件,并显示下载进度。

问题:
DownloadInfo DownloadManager 正在更新对象以非常高的速度。 DownloadManagerViewController (负责显示下载进度)正在使用 NSFetchedResultsControllerDelegate 更新列表方法。结果是主队列中发生了很多事情,应用程序的响应能力很差。

我怎样才能解决这个问题?如何使应用程序响应,同时显示下载进度?

  • 我不知道如何传达 DownloadManager 之间的下载状态和 DownloadManagerViewController .还有另一种/更好的方法吗?
  • 我不想在我的 DownloadManager 中使用主托管对象上下文。 , 原因如上。请注意,DownloadManager正在使用 AFNetworking它异步处理请求,但最终是 DownloadInfo对象在主线程中更新(作为回调方法的结果)。也许有一种方法可以在后台线程中处理下载和状态更新操作?但如何?我将如何在主线程和后台线程之间进行通信,即我将如何告诉后台线程排队另一个文件以供下载?

  • 谢谢。

    最佳答案

    与其观察托管对象上下文的每一次更改,不如考虑为您实际想要更新屏幕的事件实现一个或多个通知。如果通知是从后台线程发布的,请确保在触发任何 UI 更新之前切换回主线程。

    或者,当调用 FRC 委托(delegate)方法时,您会收到有关实际更改内容的信息。您可以对此进行分析并过滤掉最频繁和最不重要的更改,并阻止它们导致 UI 更新。

    关于ios - 核心数据 + AFNetworking + UI 更新(响应性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17378968/

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