Swift 在 AppDelegate 中延迟设置 rootViewController

Posted

技术标签:

【中文标题】Swift 在 AppDelegate 中延迟设置 rootViewController【英文标题】:Swift sets rootViewController in AppDelegate with delay 【发布时间】:2016-01-13 18:13:57 【问题描述】:

我想在 AppDelegate 中设置初始 ViewController。如:

 if jsonResult["result"]!.intValue == 1 
     let entryPoint: UITabBarController = mainStoryboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController
     self.window?.rootViewController = entryPoint
 else 
     let entryPoint: WelcomeController = mainStoryboard.instantiateViewControllerWithIdentifier("WelcomeController") as! WelcomeController
     self.window?.rootViewController = entryPoint

它可以工作,但起初它会打开我在情节提要中设置为初始值的视图控制器,然后它会以编程方式切换。

那么,如何在不显示我的第一个控制器的情况下直接切换控制器?我做错了什么?

【问题讨论】:

问题是(至少似乎是因为我们在这里没有很多细节)您正在等待 JSON 有效负载在加载 UI 之前被接收和解析。如果用户没有互联网连接会发生什么?如果连接速度非常慢/不稳定怎么办?我会花一些时间重新考虑应用程序的流程。这些视图真的是用户应该看到的第一个视图吗? 【参考方案1】:

除了galois的评论:

...如果 由于完成的请求出错而没有结果会发生什么?使用! 强制解包结果会使您的应用程序崩溃。您应该查看 Grand Central Dispatch 电话。启动异步调用以获取您的 JSON,并在主线程上通过回调在完成时更新您的 UI,并让您的 UI 在后台等待 JSON 时直接加载到某种“等待”状态。

【讨论】:

我做了dispatch_async(dispatch_get_main_queue(), () -> Void in,在其中我正在加载 JSON 并做我需要做的事情。是的,它有效,但部分有效。现在它加载得更快了,但它显示了故事板中的初始视图控制器半秒钟。我想完全忽略它

以上是关于Swift 在 AppDelegate 中延迟设置 rootViewController的主要内容,如果未能解决你的问题,请参考以下文章

Swift:如何通过快速操作从 AppDelegate 访问某个 TabBar 选项卡?

用于 Flutter iOS Swift 设置的谷歌地图

无法在 Swift 中使用时间延迟为 UIImage 设置动画

AppDelegate.swift 如何在 Xcode 6.3 中替换 AppDelegate.h 和 AppDelegate.m

Swift - 在 AppDelegate 中实例化视图控制器

swift中AppDelegate和Context的作用是啥?