滚动时小部件数据不更新 - Swift

Widget data doesn't update when scrolling - Swift

我有一个带有数据的小部件。当我今天启动扩展程序时,我的小部件数据正在实时更新和显示。但是当我将通知中心和 return 滚动到我的小部件时,它不会更新。我尝试了几种不同的方法,但它们对我没有帮助。我在下面写了我尝试的最后一个方法。

     override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "updateLabels", userInfo: nil, repeats: true)
    }


    func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) {
        // Perform any setup necessary in order to update the view.

        // If an error is encountered, use NCUpdateResult.Failed
        // If there's no update required, use NCUpdateResult.NoData
        // If there's an update, use NCUpdateResult.NewData
        completionHandler(.NewData)
    }


   func updateLabels() {
        runtimeLabel.text = returnTime() + "     " + returnDay()
    }

    func returnTimeInterval() -> NSTimeInterval {
        let uptime = NSProcessInfo().systemUptime
        return uptime
    }

    func returnTime() -> String {
        dateFormatter.unitsStyle = .Short
        dateFormatter.allowedUnits = [.Day, .Hour, .Minute, .Second]
        dateFormatter.zeroFormattingBehavior = .Pad
        let time = dateFormatter.stringFromTimeInterval(returnTimeInterval())!
        return time
    }

    func returnDay() -> String {
        dateFormatter.unitsStyle = .Short
        dateFormatter.allowedUnits = [.Year, .Month, .Day]
        dateFormatter.zeroFormattingBehavior = .Pad
        let date = NSDate(timeInterval: -returnTimeInterval(), sinceDate: NSDate())
        let formatter = NSDateFormatter()
        formatter.locale = NSLocale.currentLocale()
        formatter.dateStyle = .MediumStyle
        let megaDate = formatter.stringFromDate(date)
        return megaDate
    }

我尝试了同样的方法,它与下面的代码一起工作:

@IBOutlet weak var infoLabel: UILabel!
var timer = NSTimer()
var counter = 0

    override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated)

            timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateLabel"), userInfo: nil, repeats: true)
        }

    func updateLabel(){
            counter += 1
            myLabel.text = "Test \(counter)"
        }

更新:

viewWillAppearviewDidAppear 应在小部件处于活动状态后调用,viewDidDisappear 应在滚动(离开小部件)时调用。至于现在 viewDidDisappear 正在按预期工作,但 viewWillAppearviewDidAppear 在滚动时没有。

这是一个无法正常工作的已知错误,您可以在此 post at Apples forum and check the bug status report here 中阅读更多信息。

您应该在 widgetPerformUpdateWithCompletionHandler 方法中编写更新代码。