Обновление UIProgressView из сети - PullRequest
0 голосов
/ 20 февраля 2019

Я использую Xcode 10 и Swift 4.2

в viewDidload () UIViewController, я объявляю наблюдателя:

override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(OtherFunctionsViewController.dataImportExportFunc), name: .ImportExportdata, object: nil)
} 

Из сети я получаю сообщение (на основе.Имя ImportExportdata), которое увеличивает значение с плавающей точкой с именем ProgressLevel с 0,0 до 1,0

. Я объявил, что это значение следует IOS, и оно работает.Он правильно печатает значение, которое будет обновлено

@IBOutlet weak var OtherFuncProgressView: UIProgressView!
var ProgressLevel : Float = 0.0 {
    willSet // "name" is ABOUT TO CHANGE
    {
        print("ProgressLevel WILL be set...")
        print("from current value: \(ProgressLevel)")
        print("to new value: \(newValue).\n")
        DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async
            {
                DispatchQueue.main.async
                    {
                        print("dispatch queue main")
                        self.OtherFuncProgressView.setProgress(Float(self.ProgressLevel), animated: true)
                        self.OtherFuncProgressView.setNeedsDisplay()
                }
        }
    }
}

ProgressLevel правильно печатается, но progressView никогда не обновляется на экране.

Что не так?

Спасибо заваш ответ

Я изменяю свой код в соответствии с вашим предложением следующим образом:

    var ProgressLevel : Float = 0.0

    {
        willSet // "name" is ABOUT TO CHANGE
        {
            print("ProgressLevel WILL be set...")
            print("from current value: \(ProgressLevel)")
            print("to new value: \(newValue).\n")
//            DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async
//                {
                    DispatchQueue.main.async
                        {
                            print("dispatch queue main value \(newValue)")
//                            self.OtherFuncProgressView.setProgress(Float(self.ProgressLevel), animated: true)
                            self.OtherFuncProgressView.setProgress(Float(newValue), animated: true)

                            self.OtherFuncProgressView.setNeedsDisplay()
                    }
//            }
        }
}

Я получил: ProcessImportFile: file: /// Users / guydesbief / Library / Developer / CoreSimulator / Devices /17DA59AA-430F-4395-B2F3-FF2A81EEB429 / data / Containers / Data / Application / 91B3BA10-45C1-4090-A401-5CDA03EED8C8 / tmp / 2019-2-21_2018-2-19_Mois.csv 2019-02-21 11:18:22.755903 + 0100 SolarPanelSurveyIos [85928: 4363118] razImport Done ProgressLevel будет установлен ... от текущего значения: 0,0 до нового значения: 0,0.

2019-02-21 11: 18: 22.758389 + 0100 SolarPanelSurveyIos [85928: 4363118] Статистический файл WindowController Stream OK 2019-02-21 11: 18: 22.760550 + 0100 SolarPanelSurveyIos [85928: 4363118] нет буфера!главное значение очереди отправки 0.0 2019-02-21 11: 18: 22.760800 + 0100 SolarPanelSurveyIos [85928: 4363118] Statistic WindowController Нет данных, считанных из файла!2019-02-21 11: 18: 22.761242 + 0100 SolarPanelSurveyIos [85928: 4363118] Заголовок поля: запись импорта, завершенная char Nbfields = 4, текущая запись: 0 2019-02-21 11: 18: 22.761342 + 0100 SolarPanelSurveyIos [85928:4363118] Импорт завершен 40 записей, 38 Maxrecords

ProgressLevel будет установлен ... от текущего значения: 0,0 до нового значения: 0,05263158.

ProgressLevel будет установлен ... от текущего значения:От 0,05263158 до нового значения: 0,13157895.

ProgressLevel будет установлен ... от текущего значения: 0,13157895 до нового значения: 0,21052632.

ProgressLevel будет установлен ... от текущего значения: 0,21052632 доновое значение: 0,28947368.

ProgressLevel будет установлен ... от текущего значения: 0,28947368 до нового значения: 0,36842105.

ProgressLevel будет установлен ... от текущего значения: 0,36842105 до нового значения: 0.4473684.

ProgressLevel будет установлен ... от текущего значения: 0,4473684 до нового значения: 0,5263158.

ProgressLevel будет установлен ... от текущего значения: 0,5263158 доновое значение: 0.6052632.

Будет установлен ProgressLevel ... из текущего значения: 0.6052632 в новое значение: 0.68421054.

Будет установлено в ProgressLevel ... из текущего значения: 0.68421054 в новое значение: 0.7631579.

Будет установлен ProgressLevel ... от текущего значения: 0,7631579 до нового значения: 0,84210527.

Будет установлен ProgressLevel ... от текущего значения: 0,84210527 до нового значения: 0,92105263.

ProgressLevel будет установлен ... от текущего значения: 0,92105263 до нового значения: 1,0.

2019-02-21 11: 18: 23.631275 + 0100 SolarPanelSurveyIos [85928: 4363118] Tempsd'exécution: 871867

dataImportExportFunc Больше нет данных число записей: 0 / 39.000000 execTime: 0.8719

главное значение очереди отправки 0,05263158

основное значение очереди отправки 0,13157895

главное значение очереди отправки 0.21052632

главное значение очереди отправки 0.28947368

главное значение очереди отправки 0.36842105

главное значение очереди отправки 0.4473684

главное значение очереди отправки 0.5263158

главное значение очереди отправки 0.6052632

главное значение очереди отправки 0.68421054

главное значение очереди отправки 0.7631579

отправкаглавное значение очереди 0,84210527

основное значение очереди отправки 0,92105263

главное значение очереди отправки 1,0

очередь отправки очищается только в конце процесса, и я хочу очистить еев режиме реального времени любые предложения приветствуются

1 Ответ

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

willSet вызывается до обновления значения, поэтому лучше использовать newValue внутри замыкания:

var progressLevel: Float = 0.0 {
    // "name" is ABOUT TO CHANGE
    willSet {
        print("ProgressLevel WILL be set...")
        print("from current value: \(progressLevel)")
        print("to new value: \(newValue).\n")
        DispatchQueue.main.async {
            print("dispatch queue main")
            self.OtherFuncProgressView.setProgress(Float(newValue, animated: true)
            self.OtherFuncProgressView.setNeedsDisplay()
        }
    }
}
...