NotificationCenter处理程序更新变量,但UILabel保持不变

时间:2019-01-31 09:04:09

标签: swift xcode10.1

使用在迷你iPad OS 12.1.1上运行应用程序的Xcode 10.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 :(得分:0)

您正在将通知发布到通知中心。您介意显示方式和时间吗?

假设您使用的是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
    }))
}

尝试一下。

答案 1 :(得分:-1)

对不起-这是我的第一篇SO文章,没有(应该是我的头脑,也因此是你的头脑)不清楚。原来与NotificationCenter无关。

这是一个线程问题-我仍在搜索。

感谢您的努力:)