ios - 未从 AppDelegate 设置 RootViewController?

标签 ios swift appdelegate

我正在使用存档对象来确定启动时需要加载哪个 View (或者只是从 sleep 状态打开应用程序)以及 bool 标志。尽管我的 if 语句计算正确,但其中的代码却不然。

以下是 didFinishLaunchingWithOptions 中的内容:

// Register permission to throw notifications
        application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert | .Badge | .Sound, categories: nil))

        var so = StatusOverseer.sharedOverseer

        println("User did finish application: \(so.userDidFinishApplication)")
        println("Banks Did Respond: \(so.banksDidRespond)")
        println("user did accept terms: \(so.userDidAcceptTerms)")

        // Decide whether or not to present the waiting view
        if so.userDidFinishApplication && !so.banksDidRespond {
            let sb = UIStoryboard(name: "Main", bundle: nil)
            let vc = sb.instantiateViewControllerWithIdentifier("submitWaiting") as! UIViewController

            UIApplication.sharedApplication().keyWindow?.rootViewController = vc
        }
        else if so.banksDidRespond {
            println("bip")
            let sb = UIStoryboard(name: "Main", bundle: nil)

            if so.notificationWasGood {
                let vc = sb.instantiateViewControllerWithIdentifier("approved") as! UIViewController
                UIApplication.sharedApplication().keyWindow?.rootViewController = vc
            }
            else {
                let vc = sb.instantiateViewControllerWithIdentifier("notApproved") as! UIViewController
                UIApplication.sharedApplication().keyWindow?.rootViewController = vc
            }
        }
        else if so.userDidAcceptTerms {
            println("Did Run")
            let sb = UIStoryboard(name: "Main", bundle: nil)
            let vc = sb.instantiateViewControllerWithIdentifier("LicenseViewNav") as! UIViewController

            UIApplication.sharedApplication().keyWindow?.rootViewController = vc
        }

这是控制台输出:

Recalling Status Overseer from Archive...
User did finish application: false
Banks Did Respond: false
user did accept terms: true
Did Run

请注意,底部的 else if 按预期运行,但我在启动时看到的 View 不是以下行中声明的 LicenseViewNav:

let vc = sb.instantiateViewControllerWithIdentifier("LicenseViewNav") as! UIViewController    
UIApplication.sharedApplication().keyWindow?.rootViewController = vc

如果有人知道发生了什么,那就太好了。谢谢!

编辑:当前问题似乎是 keyWindow 计算结果为 nil

最佳答案

在 swift 中设置 Root View Controller 的最佳方法

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {

     var rootView: MyRootViewController = MyRootViewController()

     if let window = self.window{
            window.rootViewController = rootView
     }

     return true
}

关于ios - 未从 AppDelegate 设置 RootViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31966632/

相关文章:

ios - 有了新的 App Transport Security 策略,为什么旧​​的应用程序仍然可以工作?

swift - 如何在 NSURLSession 中使用 PUT 方法向 HTTPBody 添加数据?

ios - swift - 弹出窗口指针未指向其调用者

ios - 在应用程序启动时获取推送通知详细信息

iOS 收据验证状态码 21009 : What’s MZInAppCacheAccessException?

ios - 如何使方形 ImageView 自动布局

iphone - 从 AppDelegate 导航 iOS Storyboard ViewControllers

ios - 如何在应用程序处于后台时查询 HealthKit (HKWorkout) 更新?

iOS 约束导致 SIGABRT 错误

swift - Keras 层 '<class ' keras.layers.core.Lambda'>' 不支持。将 keras 模型 .h5 转换为 .mlmodel