首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI应用程序支持iOS 13时不运行

SwiftUI应用程序支持iOS 13时不运行
EN

Stack Overflow用户
提问于 2022-05-13 03:50:25
回答 2查看 425关注 0票数 1

当部署目标为15.2时,App运行良好,但随后我需要将部署目标更改为iOS 13,以支持更多设备。在iOS 14+上仍然可以正常工作,但是当它在模拟器上运行在iOS 13上时,它会与异常Thread 1: signal SIGABRT一起崩溃。控制台不显示调试信息:

代码语言:javascript
复制
CoreSimulator 802.6 - Device: iPhone 11 (iOS 13.0) (6CCC2B89-002B-4E83-8175-C244984BFC46) - Runtime: iOS 13.0 (17A577) - DeviceType: iPhone 11
Message from debugger: Terminated due to signal 9

下面是WeatherApp.swift文件代码的相关片段以及错误的屏幕截图:

代码语言:javascript
复制
@main
struct WeatherAppWrapper {
    static func main() {
        if #available(iOS 14.0, *) {
            WeatherApp.main()
        }
        else {
            UIApplicationMain(CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(SceneDelegate.self))
        }
    }
}
代码语言:javascript
复制
struct WeatherApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    @StateObject var loginStatus = UserLoginStatus()
    
    @available(iOS 14.0, *)
    var body: some Scene {
        WindowGroup {
            NavigationView{
                if Methods.UserAccount.getFromUserDefaults()["username"] != nil {
                    MainView(loggedIn: $loginStatus.loggedIn)
                    LoginView(username: "", password: "", loggedIn: $loginStatus.loggedIn)
                } else {
                    LoginView(username: "", password: "", loggedIn: $loginStatus.loggedIn)
                    MainView(loggedIn: $loginStatus.loggedIn)
                }
            }
        }
    }

    class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate {
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

            //Some app-specific setup code
            ...
            
            return true
        }
        
    }
}
代码语言:javascript
复制
class UserLoginStatus: ObservableObject {
    @Published var loggedIn: Bool {
        didSet {
            print("The value of loggedIn changed from \(oldValue) to \(loggedIn)")
        }
    }
    
    init () {
        loggedIn = false
    }
}

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    @StateObject var loginStatus = UserLoginStatus()

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        let mainView = MainView(loggedIn: $loginStatus.loggedIn)
        let loginView = LoginView(username: "", password: "", loggedIn: $loginStatus.loggedIn)

        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            
            if Methods.UserAccount.getFromUserDefaults()["username"] != nil {
                window.rootViewController = UIHostingController(rootView: mainView)
            } else {
                window.rootViewController = UIHostingController(rootView: loginView)
            }
            
            self.window = window
            window.makeKeyAndVisible()
        }
    }
    
}

另外,下面是Info.plist文件的屏幕截图,特别是扩展了相关区域:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-13 04:55:12

StateObject可以从SwiftUI 2.0 (iOS 14)中获得,并且设计成在视图中工作,而不是在类中工作(比如SceneDelegate)

对于所提供的场景,可能的解决方案是在顶层(委托或主视图中)使用logicState作为只是属性,但将其完全注入子视图(而不是仅仅绑定),并在内部观察它。

所以看起来应该是

代码语言:javascript
复制
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var loginStatus = UserLoginStatus() // << just hold here

// ...

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        let mainView = MainView(loginStatus: loginStatus) // << here !!

代码语言:javascript
复制
struct MainView: View {
    @ObservedObject var loginStatus: UserLoginStatus   // << injected here

// ...
}

WeatherApp中也可以这样做

票数 3
EN

Stack Overflow用户

发布于 2022-05-13 04:36:23

根据苹果文档的说法,StateObject只能在iOS 14+上使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72224245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档