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 选项卡?
无法在 Swift 中使用时间延迟为 UIImage 设置动画
AppDelegate.swift 如何在 Xcode 6.3 中替换 AppDelegate.h 和 AppDelegate.m