ios - 在 Realm 下载内容时如何更新 progressView

标签 ios swift realm progress-bar

我正在尝试弄清楚如何使用 progressView 来显示使用 Realm 下载的内容的进度。通过阅读似乎需要找到一个名为 progress 的 Float,但我不知道如何在 Realm 中找到它。我查看了以下问题,但我认为它们在这种情况下没有太大帮助: Swift: Realm - Update UI (Progress) while adding Data to DB iOS-Swift How to update progressView

这是我目前拥有的: View Controller :

import UIKit
import Realm
import RealmSwift

class ViewController: UIViewController {

    var data = "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda."


    var realm: Realm!



    @IBOutlet weak var saveBtn: UIButton!

    @IBOutlet weak var progressView: UIProgressView!


    override func viewDidLoad() {
        super.viewDidLoad()
        print("Hello")
        print(Realm.Configuration.defaultConfiguration.fileURL!)
        realm = try! Realm()
    }

    @IBAction func saveBtnPressed(_ sender: Any) {
        saveToRealm(id: 1, name: "One", data: data)
        let progress: Float = 0
        progressView.setProgress(progress, animated: true)
    }


    func saveToRealm(id: Int, name: String, data: String) {
        let realmSave = RealmSave()
        realmSave.id = id
        realmSave.name = name
        realmSave.data = data
        try? realm!.write {
            realm.add(realmSave, update: true)
        }

    }
}

如果有什么我可以帮忙的,请尽管问。谢谢

最佳答案

首先:定义一个值为 0 的 let 常量将始终保持为 0。您不能动态更改它以反射(reflect)下载状态。

正如 Realm 工程师在 this 中指出的那样发布 “Realm 无法知道数据总量。” 估计进度应该在您的代码中完成。

你可以尝试这样的事情:

    func estimateProgress() {

        let dataString = "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda."

        let data = dataString.data(using: .utf8)
        let count = Float((data?.count)!)

        let percentage: Float = count / 100

        var progress: Float = 0

        if progress < count {
           progress += percentage
        } else {
           progress = count
        }

        progressView.setProgress(progress, animated: true)
        print(progress)

}

请注意,此解决方案用于更新 UI 并让用户知道正在保存到 Realm。由于它使用数据中的字节数,数据越大,进度条填充所需的时间就越长。所以对UI来说是好的,但不是实际的进步状态。

如果您觉得进度条填充速度变慢/变快,您可以随时调整百分比。

关于ios - 在 Realm 下载内容时如何更新 progressView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54641959/

相关文章:

ios - 像这样在 UILabel 中获得一个看起来正常的 unicode 向下箭头 ⬇

ios - 如何使用 AVFoundation 延迟几秒同时录制和播放捕获的视频?

objective-c - 按钮边框颜色 - Objective C - Swift

ios - 在 RealmOptional 上过滤会删除 nil 值,而 CoreData 谓词不会

使用 Realm 和 RAC 进行 Swift 单元测试

json - 如何使用单个 JSON 更新整个 Realm

objective-c - 有弹性的 UIBezierPath 线?

ios - 最近没有在 UIWebView 上使用 iframe 播放器播放 youtube 剪辑

当我设置新字体时,iOS 导航栏不改变颜色

ios - 为什么我的图像有时无法在模拟器中显示?