我正在使用Spotify APK授权连接到Spotify应用程序。所有与Spotify的通信都是通过现场代表完成的。我的问题是,当我请求授权时,当我被带到Spotify应用程序时,当前的视图似乎停止使用@已发布的变量更改进行更新。但是,我希望在成功的授权/连接之后更改视图。
我尝试让MainView更新使用不同变量的不同更改,但似乎无论我做什么,一旦应用程序离开并重新进入前台,视图就不再使用已发布变量的更改来更新。
代表:
class SceneDelegate: UIResponder, UIWindowSceneDelegate, SPTAppRemoteDelegate, SPTAppRemotePlayerStateDelegate {
@ObservedObject var MainVM = MainViewModel()
func appRemoteDidEstablishConnection(_ appRemote: SPTAppRemote) {
MainVM.viewSwitch = false
}
}
MainViewModel:
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("")
}
}
MainView:
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如environmentObject在……里面MainView,就像
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let contentView = MainView().environmentObject(MainVM)
并相应声明
struct MainView: View {
@EnvironmentObject var MainVM: MainViewModel
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。