Arn*_*ani 1 json ios swift widgetkit swiftui
我有一个从我的应用程序获取数据的小部件。该小部件工作正常,但更新不够频繁。理想情况下,我希望它能够在我的应用程序中删除或添加项目时进行更新,因此如果有一种方法可以强制小部件更新,那么这是可行的。否则,如果小部件可以更频繁地获取新数据,那么也可以正常工作。
数据存储在应用程序组中的 json 文件中。我将该数据加载并解码到一个数组中,然后从该数组中选择一个随机项目进行显示。
这是小部件提供程序:
let testBook = Book(id: UUID(), name: "Name", author: "Author", genre: "Error", page: "0", total: "77")
public enum AppGroup: String {
case Livre = "group.com.identifier"
public var containerURL: URL {
switch self {
case .Livre:
return FileManager.default.containerURL(
forSecurityApplicationGroupIdentifier: self.rawValue)!
}
}
}
struct Provider: TimelineProvider {
func placeholder(in context: Context) -> SimpleEntry {
SimpleEntry(date: Date(), book: testBook)
}
func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
let entry = SimpleEntry(date: Date(), book: testBook)
completion(entry)
}
func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
var entries: [SimpleEntry] = []
let currentDate = Date()
for hourOffset in 0 ..< 5 {
let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)!
let books: [Book] = self.load("list")
let entry = SimpleEntry(date: entryDate, book: books.randomElement() ?? testBook)
entries.append(entry)
}
let timeline = Timeline(entries: entries, policy: .atEnd)
completion(timeline)
}
func load<T: Decodable>(_ filename: String) -> T {
let groupDirectory = AppGroup.Livre.containerURL
let groupURL = groupDirectory
.appendingPathComponent(filename)
.appendingPathExtension("json")
return try! JSONDecoder().decode(T.self, from: Data(contentsOf: groupURL))
}
}
Run Code Online (Sandbox Code Playgroud)
由于我是 widgetKit 的新手,我不确定我是否提供了足够的上下文,请告诉我您是否需要更多信息或代码。
小智 8
您始终可以使用下面的代码块从您的应用程序更新您的小部件。请注意,您需要import WidgetKit在您的班级中调用此函数。
WidgetCenter.shared.reloadAllTimelines()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1710 次 |
| 最近记录: |