Arhn - архитектура программирования

Как обновить progressView при загрузке чего-либо в реальном мире

Я пытаюсь понять, как использовать progressView, чтобы показать ход загрузки чего-либо с помощью Realm. При чтении кажется, что нужно найти поплавок, называемый прогрессом, но я не знаю, как его найти в Realm. Я просмотрел следующие вопросы, но не думаю, что они слишком полезны в этой ситуации: Swift: Realm - Обновление пользовательского интерфейса (прогресс) при добавлении данных в БД iOS-Swift Как обновить 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)
        }

    }
}

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


  • Так что же происходит? Индикатор загрузки не исчезает с экрана? 12.02.2019
  • Я предполагаю, что речь идет о сохранении данных, а не о извлечении данных из базы данных области?? 12.02.2019

Ответы:


1

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

Как отметил инженер Realm в этом сообщении , "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. Поскольку он использует количество байтов в данных, чем больше данные, тем больше времени потребуется для заполнения индикатора выполнения. Так что это хорошо для пользовательского интерфейса, но это не фактическое состояние прогресса.

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

12.02.2019
  • @То же. Спасибо, это сработало отлично. Также я знаю, что это не имеет значения, но я знал о 0 для прогресса. Это был просто заполнитель для того времени. 13.02.2019
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..