Как обновить progressView при загрузке чего-либо в области - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь выяснить, как использовать progressView для отображения прогресса загрузки чего-либо с помощью Realm.Через чтение кажется, что нужно найти Float, называемый прогрессом, но я не знаю, как найти это в Realm.Я рассмотрел следующие вопросы, но не думаю, что они слишком полезны в этой ситуации: Swift: Realm - обновление пользовательского интерфейса (прогресс) при добавлении данных в БД iOS-Swift Howобновить progressView

Это то, что у меня есть в данный момент: ViewController:

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)
        }

    }
}

Если есть что-то, с чем я могу помочь, пожалуйста, спросите.Спасибо

1 Ответ

0 голосов
/ 12 февраля 2019

Во-первых: определение константы let со значением 0 всегда будет оставаться 0. Вы не можете динамически изменить это, чтобы отразить состояние вашей загрузки.

Как указал инженер из Realm в this post "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)

}

Обратите внимание, что это решение предназначено для обновления пользовательского интерфейса и информирования пользователя о том, что выполняется сохранение в Realm.Поскольку он использует количество байтов в данных, чем больше данные, тем больше времени потребуется для заполнения индикатора выполнения.Так что это хорошо для пользовательского интерфейса, но это не фактическое состояние прогресса.

И если вы чувствуете, что индикатор выполнения заполняется медленно / быстро, вы всегда можете настроить процент.

...