小编sub*_*ner的帖子

如何刷新Widget数据?

我的代码获取两个JSON变量,应该在我的小部件上显示它们。小部件保持空白。如果没有小部件,它会显示我的应用程序中的所有内容。

我究竟做错了什么?代码中的 API 仅用于测试,因此您也可以对其进行检查。是否需要更改某些内容才能使其显示在小部件中?

我的结构:

import Foundation

struct Results: Decodable {
    let data: [Post]
}

struct Post: Decodable, Identifiable {
    let id: String
    var objectID: String {
        return id
    }
    let home_name: String
    let away_name: String
}
Run Code Online (Sandbox Code Playgroud)

获取 JSON:

import Foundation

class NetworkManager: ObservableObject {
    
    @Published var posts = [Post]()
    
    @Published var test = ""
    @Published var test2 = ""
    
    func fetchData() {
        if let url = URL(string: "https://livescore-api.com/api-client/teams/matches.json?number=10&team_id=19&key=I2zBIRH3S01Kf0At&secret=6kLvfRivnqeNKUzsW84F0LISMJC1KdvQ&number=7&team_id=46") {
            let session = URLSession(configuration: .default)
            let task = …
Run Code Online (Sandbox Code Playgroud)

widget swift widgetkit swiftui

13
推荐指数
1
解决办法
7014
查看次数

使用主应用时如何刷新Widget?

我正在使用一个UIKit应用程序并添加了一个带有SwiftUI和 的小部件Widgetkit。现在,当用户在主应用程序中执行某项操作时,我想更新小部件。

通常我应该使用 WidgetCenter.shared.reloadAllTimelines()对吗?但这仅适用于SwiftUI.

我可以说我的小部件应该每秒重新加载。但我的小部件执行 json 请求。这也会每秒执行我不想要的 json 请求。

为您提供信息。主应用UserDefaults程序与小部件共享。根据它的不同UserDefaults,它会读取它并改变它的外观。

现在,小部件在首次添加时会加载正确的 UserDefault。但正如我所说,更改添加的小部件不起作用。

我想删除和添加小部件不是一个用户友好的选项。

swift widgetkit swiftui

9
推荐指数
1
解决办法
5097
查看次数

设置Widget的TimelineProvider刷新间隔

现在我的 Widget 每秒发出大约 1 个请求。我想将其更改为 1 小时内 1 个请求。

我在网上遇到了一些let timeline = ...类似的错误Value of optional type 'Date?' must be unwrapped to a value of type 'Date'以及更多错误。

任何可能出错的建议:

struct Provider: IntentTimelineProvider {
    let networkManager = NetworkManager()
    func placeholder(in context: Context) -> SimpleEntry {
        SimpleEntry(date: Date(), configuration: ConfigurationIntent(), clubname: networkManager.clubName)
    }
    
    func getSnapshot(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (SimpleEntry) -> ()) {
        let entry = SimpleEntry(date: Date(), configuration: configuration, clubname: networkManager.clubName)
        completion(entry)
    }
    
    func getTimeline(for configuration: …
Run Code Online (Sandbox Code Playgroud)

swift widgetkit swiftui

5
推荐指数
1
解决办法
2515
查看次数

与 AppGroup 共享数据

我想将一个变量从我的 UIKit 文件共享到我用 SwiftUI 创建的小部件扩展。 我跟着这个here。请看看 J Arango 的回答。

但我不明白那里的最后一部分。我必须使用import MySharedObjects.

所以我这样做了:

    import MySharedObject

struct testing {
    let mySharedObject = MySharedObject(name: "My Name", lastName: "My Last Name")
                       
     do {
         let data = try JSONEncoder().encode(mySharedObject)
    
          /// Make sure to use your "App Group" container suite name when saving and retrieving the object from UserDefaults
          let container = UserDefaults(suiteName:"group.com.widgetTest.widgetContainer")
              container?.setValue(data, forKey: "sharedObject")
                            
          /// Used to let the widget extension to reload the timeline
          WidgetCenter.shared.reloadAllTimelines()
    
          } catch {
            print("Unable to …
Run Code Online (Sandbox Code Playgroud)

swift widgetkit swiftui

2
推荐指数
1
解决办法
1073
查看次数

标签 统计

swift ×4

swiftui ×4

widgetkit ×4

widget ×1