gpt4 book ai didi

ios - 当应用程序进入后台时,SwiftUI View 停止更新

转载 作者:行者123 更新时间:2023-11-29 11:24:49 25 4
gpt4 key购买 nike

我正在使用 Spotify APK 授权连接到 Spotify 应用程序。与 Spotify 的所有通信都是通过 Scene Delegate 完成的。我的问题是,当我请求授权并且我被带入和带出 Spotify 应用程序时,当前 View 似乎停止更新 @Published 变量更改。但是,我希望在成功授权/连接后更改 View 。

我尝试过使用对不同变量的不同更改来更新 MainView,但似乎无论我做什么,一旦应用程序离开并重新进入前台, View 就会停止更新已发布变量的更改。

场景代理:

class SceneDelegate: UIResponder, UIWindowSceneDelegate, SPTAppRemoteDelegate, SPTAppRemotePlayerStateDelegate {

@ObservedObject var MainVM = MainViewModel()

func appRemoteDidEstablishConnection(_ appRemote: SPTAppRemote) {
MainVM.viewSwitch = false
}

}

主视图模型:

class MainViewModel: ObservableObject {

@Published var viewSwitch: Bool = true

var appRemote: SPTAppRemote {
get {
let scene = UIApplication.shared.connectedScenes.first
let sd : SceneDelegate = (scene?.delegate as? SceneDelegate)!
return sd.appRemote
}
}

func connectAppRemote() {
appRemote.authorizeAndPlayURI("")
}

}

主视图:

struct MainView: View {

@ObservedObject var MainVM = MainViewModel()

var body: some View {
if MainVM.viewSwitch {
Text("View 1 Displayed")
} else {
Text("View 2 Displayed")
}
}
.onAppear {
MainVM.connectAppRemote()
}
}

最佳答案

您使用不同的对象:

一个。 SceneDelegate 有自己的实例(顺便说一句,这里你不需要 ObservedObject)

class SceneDelegate: UIResponder, UIWindowSceneDelegate, 
SPTAppRemoteDelegate, SPTAppRemotePlayerStateDelegate {

@ObservedObject var MainVM = MainViewModel()

B. MainView 有自己的

struct MainView: View {

@ObservedObject var MainVM = MainViewModel() // << recreated

您需要在 SceneDelegate 中将其作为 MainView 中的 environmentObject 传递,例如

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, 
options connectionOptions: UIScene.ConnectionOptions) {

let contentView = MainView().environmentObject(MainVM)

并相应声明

struct MainView: View {

@EnvironmentObject var MainVM: MainViewModel

关于ios - 当应用程序进入后台时,SwiftUI View 停止更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59475058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com