Обработчик NotificationCenter обновляет переменную, но UILabel остается прежним - PullRequest
0 голосов
/ 31 января 2019

Использование Xcode 10.1 для запуска приложения на мини-iPad OS 12.1.1

Я отправляю уведомление в NotificationCenter, и функция обработчика обновляет UILabel setupProgress, чтобы показать ход импорта данных.

Раньше это работало нормально, но недавно перестало работать, возможно, в результате чего-то, что я сделал, но я не могу думать, что.

PM в коде - это функция, которая печатаетна консоль - и он говорит мне, что self.setupProgress.text, на самом деле, установлен правильно и изменяется, как и ожидалось, при загрузке данных, однако соответствующий UILabel не обновляется.

Исходный текст UILabel устанавливается следующим образом

if !self.update_type.isEmpty && self.update_type == "setup_import" {
    self.setupProgress.text = "I've told the server that this is a clean install"
}

и это работает нормально - но затем, по мере импорта, в функции обработчика (ниже) я не получаю обновлений до import_progress == "And now the end is upon us ...", и в этот момент UILabel обновляется корректно, и все продолжается, как и ожидалось.

func handleImportNotification(_ notification:Notification) {

    self.setupProgress.text = import_progress

    // should show something like 
    // `Importing F4RES : 0 of : 1395` 
    // `Importing F4RES : 500 of : 1395`
    // etc...

    PM(#line, function: #function, str1: self.setupProgress.text)
    // prints the correct updates to the console

    if import_progress == "And now the end is upon us ..." {
        self.makeShopOptions()
        self.loadingImage.stopAnimating()
        self.performSegue(withIdentifier: "setup_to_splash", sender: self)
    }
}

Приложение продолжает нормально работать - просто без ожидаемых обновлений UILabel между ними.

Заранее спасибо заЛюбые идеи.

Ответы [ 2 ]

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

Извините - это был мой первый пост в SO, и он не настолько ясен (в моей голове и, следовательно, в вашем), как следовало бы.Оказывается, это не имеет ничего общего с NotificationCenter.

Это тема с вопросом - и я все еще ищу.

Спасибо за ваши усилия:)

0 голосов
/ 31 января 2019

Вы отправляете уведомление в Центр уведомлений.Не могли бы вы показать, как и когда?

Если вы используете метод NotificationCenter.default.post notificationName:, обработчик должен принять аргумент типа Notification.В противном случае он не будет отвечать на обновления уведомлений.

Функция обработчика должна выглядеть следующим образом: func handleImportNotification(notification: Notification) { ... }

И наблюдатель:

var observer: NSObjectProtocol?

func someFunction() {
    observer = NotificationCenter.default.addObserver(forName: object: queue: using: { (Notification) in
        //Update UILabel or call the associated function
    }))
}

Попробуйте это.

...