滚动时小部件数据不更新 - 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)"
}
更新:
viewWillAppear
和 viewDidAppear
应在小部件处于活动状态后调用,viewDidDisappear
应在滚动(离开小部件)时调用。至于现在 viewDidDisappear
正在按预期工作,但 viewWillAppear
和 viewDidAppear
在滚动时没有。
这是一个无法正常工作的已知错误,您可以在此 post at Apples forum and check the bug status report here 中阅读更多信息。
您应该在 widgetPerformUpdateWithCompletionHandler
方法中编写更新代码。
我有一个带有数据的小部件。当我今天启动扩展程序时,我的小部件数据正在实时更新和显示。但是当我将通知中心和 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)"
}
更新:
viewWillAppear
和 viewDidAppear
应在小部件处于活动状态后调用,viewDidDisappear
应在滚动(离开小部件)时调用。至于现在 viewDidDisappear
正在按预期工作,但 viewWillAppear
和 viewDidAppear
在滚动时没有。
这是一个无法正常工作的已知错误,您可以在此 post at Apples forum and check the bug status report here 中阅读更多信息。
您应该在 widgetPerformUpdateWithCompletionHandler
方法中编写更新代码。