Я использую 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: файл:///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 основное значение очереди отправки 0.0 21.02.2019 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 4363118] Импорт завершен 40 записей, 38 максимальных записей
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] Темп выполнения: 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
Очередь отправки очищается только в конце процесса, и я хотел бы очистить ее в режиме реального времени Любые предложения приветствуются
DispatchQueue.main.async
вместо того, чтобы вкладывать его внутрьDispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async
- person Shamas S   schedule 20.02.2019self.OtherFuncProgressView.setNeedsDisplay()
? - person holex   schedule 21.02.2019