使用 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/