问题描述
我目前正在使用 SwiftUI 开发应用程序。
我想在每次关闭主机应用程序时从 IntentHandler
中的 CoreData 重新加载数据以更新较新的数据。
在Widget
的情况下,我们可以使用WidgetCenter.shared.reloadAllTimelines()
来更新,但是在IntentHandler
的情况下我们如何更新数据?
在我的代码中,小部件中编辑视图列表中的数据仅在宿主应用程序第一次启动时接收数据。
代码如下:
TimerApp.swift(主机应用程序)
import SwiftUI
import WidgetKit
@main
struct TimerApp: App {
@Environment(\.scenePhase) private var scenePhase
let persistenceController = PersistenceController.shared.managedobjectContext
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedobjectContext,persistenceController)
.onChange(of: scenePhase) { newScenePhase in
if newScenePhase == .inactive {
// I want to update a data in IntentHandler here
}
}
}
}
}
IntentHandler.swift (IntentsExtension)
import WidgetKit
import SwiftUI
import CoreData
import Intents
class IntentHandler: INExtension,ConfigurationIntentHandling {
var moc = PersistenceController.shared.managedobjectContext
var timerEntity:TimerEntity?
func provideNameOptionsCollection(for intent: ConfigurationIntent,searchTerm: String?,with completion: @escaping (INObjectCollection<Nsstring>?,Error?) -> Void) {
let request = NSFetchRequest<TimerEntity>(entityName: "TimerEntity")
do{
let result = try moc.fetch(request)
timerEntity = result.first
}
catch let error as NSError{
print("Could not fetch.\(error.userInfo)")
}
let nameIdentifiers:[Nsstring] = [
Nsstring(string: timerEntity?.task ?? ""),]
let allNameIdentifiers = INObjectCollection(items: nameIdentifiers)
completion(allNameIdentifiers,nil)
}
override func handler(for intent: INIntent) -> Any {
return self
}
}
Xcode:版本 12.0.1
iOS:14.0
生命周期:SwiftUI 应用
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)