iphone - 核心数据、文件下载和线程安全

标签 iphone multithreading core-data download

使用 Core Data 时,持续跨线程共享数据的首选方法是什么?我正在下载一个大文件,并希望在 UIProgressBar 中显示下载进度。实际的下载是在 NSOperation 创建的后台线程中进行的。

下载信息(本地路径、总字节数、接收字节数)被建模为 Core Data 托管对象,实际文件存储在 Documents/目录中。我想到的一个解决方案是在后台线程中创建一个单独的托管对象上下文,并向其传递 objectID 并使用 objectWithID: 方法将其拉出。每当后台线程进行保存时,主线程都会收到通知,主上下文会合并这些更改,随后更新 TableView 。

此方法有效,但保存不能太频繁,否则 UI 会卡住。因此,每收到 X KB 的数据后,UI 就会更新,其中 X 必须至少为 500 KB,UI 才能有一定的响应能力。是否有更好的方法将下载进度数据在收到时传递到主线程?

编辑:使用 KVO 有帮助吗?如果是,您知道有关该主题的任何好的教程吗?

最佳答案

我知道你已经构建了自己的系统,但我使用ASIHTTPRequest用于我所有的网络操作。它非常强大,有很多好处,比如文件恢复、直接保存到磁盘、上传进度监控、下载进度监控和厨房水槽。如果您不使用它,您可以查看源代码以了解他们是如何做到这一点的,因为当我在这个框架中使用进度报告时,UI 永远不会卡住。

关于iphone - 核心数据、文件下载和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1550050/

相关文章:

java - Condition 接口(interface)中的 signalAll 与对象中的 notifyAll

java - 当其他线程正在执行该类的静态同步方法时,一个线程能否获取该类实例的锁?

core-data - 水平 ScrollView 可滑动核心数据对象

swift - Core Data 中的可选 Int32 值需要在代码中解包可选的 Int32 值

iphone - 在 NSURLConnection 下载期间更新 iPhone UIProgressView

ios - 想要将来自推特的好友列表显示到 iPhone 应用程序中

ios - 使用 Sirikit xcode 8 的 RideBooking 概念

ios - 推送与模态转场的用例?

python 多处理示例 itertools 多个列表

ios - 获取持久协调器时核心数据奇怪崩溃