出现并发症的顺序是什么 我如何更改数据?

如何解决出现并发症的顺序是什么 我如何更改数据?

我之前问过一个关于如何刷新并发症并在那里得到一些帮助的问题,但我仍然不知道一切发生的顺序以及如何更新并发症数据。即使在 WKRefreshBackgroundTask

之后,我的并发症仍然显示一个加载的数据

How do I refresh WatchApp complications

我的 WKRefreshBackgroundTask 看起来像这样并且在调用 scheduleBackgroundRefreshTasks():

    func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
        print("__________________________________________________")
        print("Handling a background task...")
        print("App State: \(WKExtension.shared().applicationState.rawValue)")
        print(GlobalVaribles.sharedInstance.currentTime)
        print("__________________________________________________")

        
        for task in backgroundTasks {
            print("backgroundTasks = \(backgroundTasks)")

            switch task {
            // Handle background refresh tasks.
            case let backgroundTask as WKApplicationRefreshBackgroundTask:
                scheduleBackgroundRefreshTasks()
                backgroundTask.setTaskCompletedWithSnapshot(true)
            case let snapshottask as WKSnapshotRefreshBackgroundTask:
                snapshottask.setTaskCompleted(restoredDefaultState: true,estimatedSnapshotExpiration: Date.distantFuture,userInfo: nil)
            case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask:
                connectivityTask.setTaskCompletedWithSnapshot(false)
            case let urlSessionTask as WKURLSessionRefreshBackgroundTask:
                urlSessionTask.setTaskCompletedWithSnapshot(false)
            case let relevantShortcutTask as WKRelevantShortcutRefreshBackgroundTask:
                relevantShortcutTask.setTaskCompletedWithSnapshot(false)
            case let intentDidRunTask as WKIntentDidRunRefreshBackgroundTask:
                intentDidRunTask.setTaskCompletedWithSnapshot(false)
            default:
                task.setTaskCompletedWithSnapshot(false)
            }
        }
    }
}

我可以看到 scheduleBackgroundRefreshTasks 打印 "Task scheduled with targetDate = \(targetDate).") 但没有数据发生变化。

ExtensionDelegate.swift

import ClockKit
import WatchKit
import os

// The app's extension delegate.
class ExtensionDelegate: NSObject,WKExtensionDelegate {
    func applicationDidFinishLaunching(){
        print(">>>>> applicationDidFinishLaunching")
    }
    func applicationDidBecomeActive(){
        print(">>>>>>>>>> applicationDidBecomeActive")
    }
    func applicationWillResignActive(){
        print(">>>>>>>>>>>>>>> applicationWillResignActive")
    }
    func applicationWillEnterForeground(){
        print(">>>>>>>>>>>>>>>>>>>> applicationWillEnterForeground")
    }
    func applicationDidEnterBackground(){
        print(">>>>>>>>>>>>>>>>>>>>>>>>> applicationDidEnterBackground")
        scheduleBackgroundRefreshTasks()
    }
    func updateActiveComplications(){
        
    }


    func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
        print("__________________________________________________")
        print("Handling a background task...")
        print("App State: \(WKExtension.shared().applicationState.rawValue)")
        print(GlobalVaribles.sharedInstance.currentTime)
        print("__________________________________________________")

        
        for task in backgroundTasks {
            print("backgroundTasks = \(backgroundTasks)")

            switch task {
            // Handle background refresh tasks.
            case let backgroundTask as WKApplicationRefreshBackgroundTask:
                scheduleBackgroundRefreshTasks()
                backgroundTask.setTaskCompletedWithSnapshot(true)
            case let snapshottask as WKSnapshotRefreshBackgroundTask:
                snapshottask.setTaskCompleted(restoredDefaultState: true,userInfo: nil)
            case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask:
                connectivityTask.setTaskCompletedWithSnapshot(false)
            case let urlSessionTask as WKURLSessionRefreshBackgroundTask:
                urlSessionTask.setTaskCompletedWithSnapshot(false)
            case let relevantShortcutTask as WKRelevantShortcutRefreshBackgroundTask:
                relevantShortcutTask.setTaskCompletedWithSnapshot(false)
            case let intentDidRunTask as WKIntentDidRunRefreshBackgroundTask:
                intentDidRunTask.setTaskCompletedWithSnapshot(false)
            default:
                task.setTaskCompletedWithSnapshot(false)
            }
        }
    }
}

func scheduleBackgroundRefreshTasks() {
    print("-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>")
    print(GlobalVaribles.sharedInstance.title)
    print(GlobalVaribles.sharedInstance.currentTime)
    print("-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>-->>")
    let watchExtension = WKExtension.shared()
    let targetDate = Date().addingTimeInterval(60)
    let title = GlobalVaribles.sharedInstance.title
    let time = GlobalVaribles.sharedInstance.time
    let info: NSDictionary = [
        "title" : title,"time": time
    ]
    
    watchExtension.scheduleBackgroundRefresh(withPreferredDate: targetDate,userInfo: info) { (error) in
        if let error = error {
            print("An error occurred while scheduling a background refresh task: \(error.localizedDescription)")
            return
        }
        print("Task scheduled with targetDate = \(targetDate).")
    }
}

ComplicationController.swift

/*
See LICENSE folder for this sample’s licensing information.

Abstract:
A controller that configures and updates the complications.
*/

import ClockKit

class ComplicationController: NSObject,CLKComplicationDataSource {
    // MARK: - Timeline Configuration
    func getTimelineEndDate(for complication: CLKComplication,withHandler handler: @escaping (Date?) -> Void) {
        // Indicate that the app can provide timeline entries for the next 24 hours.
        handler(Date().addingTimeInterval(24.0 * 60.0 * 60.0))
    }
    func getPrivacyBehavior(for complication: CLKComplication,withHandler handler: @escaping (CLKComplicationPrivacyBehavior) -> Void) {
        // This is potentially sensitive data. Hide it on the lock screen.
        handler(.hideOnLockScreen)
    }
    func getComplicationDescriptors(handler: @escaping ([CLKComplicationDescriptor]) -> Void) {
        let descriptor = CLKComplicationDescriptor(identifier: "Scheduled_Countdown",displayName: "Scheduled Countdown",supportedFamilies: CLKComplicationFamily.allCases)
        handler([descriptor])
    }
    
    // MARK: - Timeline Population
    func getCurrentTimelineEntry(for complication: CLKComplication,withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
        print("////////////////////////////////////////////////////////////")
        print("getCurrentTimelineEntry")
        print("////////////////////////////////////////////////////////////")
            handler(createTimelineEntry(forComplication: complication,date: Date()))
    }
    
    // Return future timeline entries.
    func getTimelineEntries(for complication: CLKComplication,after date: Date,limit: Int,withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) {
        
        print("-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_")
        print("getTimelineEntries")
        print("-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_")

        let fiveMinutes = 1.0 * 60
        let twentyFourHours = 24.0 * 60.0 * 60.0
        
        var entries = [CLKComplicationTimelineEntry]()
        
        var current = date.addingTimeInterval(fiveMinutes)
        let endDate = date.addingTimeInterval(twentyFourHours)
        
        while (current.compare(endDate) == .orderedAscending) && (entries.count < limit) {
            for i in 0..<3600 {
                let line1 = CLKSimpleTextProvider(text:GlobalVaribles.sharedInstance.title)
                let line2 = CLKSimpleTextProvider(text:"\(GlobalVaribles.sharedInstance.currentTime) and \(i)")
                let template = CLKComplicationTemplateModularLargeStandardBody(headerTextProvider: line1,body1TextProvider: line2)
                let entry = CLKComplicationTimelineEntry(date: date.addingTimeInterval(Double(i)),complicationTemplate: template)
                    entries.append(entry)
            }
            //entries.append(createTimelineEntry(forComplication: complication,date: current))
            current = current.addingTimeInterval(fiveMinutes)
        }
        
        handler(entries)
    }
    
    // MARK: - Placeholder Templates
    func getLocalizableSampleTemplate(for complication: CLKComplication,withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
        let future = Date().addingTimeInterval(25.0 * 60.0 * 60.0)
        let template = createTemplate(forComplication: complication,date: future)
        handler(template)
    }

    // MARK: - Private Methods
    private func createTimelineEntry(forComplication complication: CLKComplication,date: Date) -> CLKComplicationTimelineEntry {
        
        // Get the correct template based on the complication.
        let template = createTemplate(forComplication: complication,date: date)
        
        // Use the template and date to create a timeline entry.
        return CLKComplicationTimelineEntry(date: date,complicationTemplate: template)
    }
    private func createTemplate(forComplication complication: CLKComplication,date: Date) -> CLKComplicationTemplate {
        switch complication.family {
        case .modularsmall:
            return createModularsmallTemplate(forDate: date)
        case .modularLarge:
            return createModularLargeTemplate(forDate: date)
        case .utilitarianSmall,.utilitarianSmallFlat:
            return createUtilitarianSmallFlatTemplate(forDate: date)
        case .utilitarianLarge:
            return createUtilitarianLargeTemplate(forDate: date)
        case .circularSmall:
            return createCircularSmallTemplate(forDate: date)
        case .extraLarge:
            return createExtraLargeTemplate(forDate: date)
        case .graphicCorner:
            return createGraphicCornerTemplate(forDate: date)
        case .graphicCircular:
            return createGraphicCircleTemplate(forDate: date)
        case .graphicRectangular:
            return createGraphicRectangularTemplate(forDate: date)
        case .graphicBezel:
            return createGraphicBezelTemplate(forDate: date)
        case .graphicExtraLarge:
            if #available(watchOSApplicationExtension 7.0,*) {
                return createGraphicExtraLargeTemplate(forDate: date)
            } else {
                fatalError("Graphic Extra Large template is only available on watchOS 7.")
            }
        @unkNown default:
            fatalError("*** UnkNown Complication Family ***")
        }
    }
    
    // Return a modular small template.
    private func createModularsmallTemplate(forDate date: Date) -> CLKComplicationTemplate {
        
        print(">>> createModularsmallTemplate <<<")
        let title = CLKSimpleTextProvider(text: "Loading")
        let time = CLKSimpleTextProvider(text: "...")
//        GlobalVaribles.sharedInstance.startSocket()
        
        // Create the template using the providers.
        return CLKComplicationTemplateModularsmallStackText(line1TextProvider: title,line2TextProvider: time)
    }
    private func createModularLargeTemplate(forDate date: Date) -> CLKComplicationTemplate {
        let titleTextProvider = CLKSimpleTextProvider(text: "Scheduled Countdown")
        let title = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.title)
        let time = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.time)
        
        // Create the template using the providers.
        return CLKComplicationTemplateModularLargeStandardBody(headerTextProvider: titleTextProvider,body1TextProvider: title,body2TextProvider: time)
    }
    private func createUtilitarianSmallFlatTemplate(forDate date: Date) -> CLKComplicationTemplate {
        // Create the data providers.
        let title = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.title)
        let time = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.time)
        let combinedMGProvider = CLKTextProvider(format: "%@ %@",title,time)
        
        // Create the template using the providers.
        return CLKComplicationTemplateUtilitarianSmallFlat(textProvider: combinedMGProvider)
    }
    private func createUtilitarianLargeTemplate(forDate date: Date) -> CLKComplicationTemplate {
        // Create the data providers.
        let title = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.title)
        let time = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.time)
        let combinedMGProvider = CLKTextProvider(format: "%@ %@",time)
        
        // Create the template using the providers.
        return CLKComplicationTemplateUtilitarianLargeFlat(textProvider: combinedMGProvider)
    }
    private func createCircularSmallTemplate(forDate date: Date) -> CLKComplicationTemplate {
        // Create the data providers.
        let title = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.title)
        let time = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.time)
        
        // Create the template using the providers.
        return CLKComplicationTemplateCircularSmallStackText(line1TextProvider: title,line2TextProvider: time)
    }
    private func createExtraLargeTemplate(forDate date: Date) -> CLKComplicationTemplate {
        // Create the data providers.
        let title = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.title)
        let time = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.time)
        
        // Create the template using the providers.
        return CLKComplicationTemplateExtraLargeStackText(line1TextProvider: title,line2TextProvider: time)
    }
    private func createGraphicCornerTemplate(forDate date: Date) -> CLKComplicationTemplate {
        // Create the data providers.
        let leadingValueProvider = CLKSimpleTextProvider(text: "0")
        leadingValueProvider.tintColor = .green
        
        let trailingValueProvider = CLKSimpleTextProvider(text: "500")
        trailingValueProvider.tintColor = .blue
        
        let title = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.title)
        let time = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.time)
        let combinedMGProvider = CLKTextProvider(format: "%@ %@",time)
        
        let percentage = Float(0.5)
        let gaugeProvider = CLKSimpleGaugeProvider(style: .fill,gaugeColors: [.green,.yellow,.red],gaugeColorLocations: [0.0,300.0 / 500.0,450.0 / 500.0] as [NSNumber],fillFraction: percentage)
        
        // Create the template using the providers.
        return CLKComplicationTemplateGraphicCornerGaugeText(gaugeProvider: gaugeProvider,leadingTextProvider: leadingValueProvider,trailingTextProvider: trailingValueProvider,outerTextProvider: combinedMGProvider)
    }
    private func createGraphicCircleTemplate(forDate date: Date) -> CLKComplicationTemplate {
        // Create the data providers.
        let percentage = Float(0.5)
        let gaugeProvider = CLKSimpleGaugeProvider(style: .fill,fillFraction: percentage)
        
        let title = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.title)
        let time = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.time)
        
        // Create the template using the providers.
        return CLKComplicationTemplateGraphicCircularOpenGaugeSimpleText(gaugeProvider: gaugeProvider,bottomTextProvider: title,centerTextProvider: time)
    }
    private func createGraphicRectangularTemplate(forDate date: Date) -> CLKComplicationTemplate {
        // Create the data providers.
        let titleTextProvider = CLKSimpleTextProvider(text: "Coffee Tracker",shortText: "Coffee")
        
        let title = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.title)
        let time = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.time)
        let combinedMGProvider = CLKTextProvider(format: "%@ %@",fillFraction: percentage)
        
        // Create the template using the providers.
        
        return CLKComplicationTemplateGraphicRectangularTextGauge(headerTextProvider: titleTextProvider,body1TextProvider: combinedMGProvider,gaugeProvider: gaugeProvider)
    }
    private func createGraphicBezelTemplate(forDate date: Date) -> CLKComplicationTemplate {
        
        // Create a graphic circular template with an image provider.
        let circle = CLKComplicationTemplateGraphicCircularImage(imageProvider: CLKFullColorImageProvider(fullColorImage: #imageLiteral(resourceName: "CoffeeGraphicCircular")))
        
        // Create the text provider.
        let title = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.title)
        let time = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.time)
        
        let separator = NSLocalizedString(",",comment: "Separator for compound data strings.")
        let textProvider = CLKTextProvider(format: "%@%@ %@",separator,time)
        
        // Create the bezel template using the circle template and the text provider.
        return CLKComplicationTemplateGraphicBezelCircularText(circularTemplate: circle,textProvider: textProvider)
    }
    private func createGraphicExtraLargeTemplate(forDate date: Date) -> CLKComplicationTemplate {
        
        // Create the data providers.
        let percentage = Float(0.5)
        let gaugeProvider = CLKSimpleGaugeProvider(style: .fill,fillFraction: percentage)
        
        let title = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.title)
        let time = CLKSimpleTextProvider(text: GlobalVaribles.sharedInstance.time)
        
        return CLKComplicationTemplateGraphicExtraLargeCircularOpenGaugeSimpleText(
            gaugeProvider: gaugeProvider,centerTextProvider: time)
    }
    
    
    
    
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?