我有一个选项卡式的iOS应用程序,每个选项卡都有某种json请求,所以视图加载会稍微慢一些。我想完全消除这个延迟,所以我想知道是否有一种方法可以在应用程序的登录阶段从每个类调用ViewDidLoad函数。
if (login == "Success") {
UserDefaults.standard.set(true, forKey: "isUserLoggedIn");
UserDefaults.standard.synchronize();
DispatchQueue.main.async {
// Load all resources here
}
}我可以理解,如果应用程序非常大,这可能是一种糟糕的做法,但我认为在这种情况下,应用程序并不是很大,但视图控制器之间的滞后足以让人讨厌。我宁愿让用户在开始等待3-5秒,而一切加载,并有一个顺利的经验一旦里面。有没有办法做到这一点?
发布于 2017-04-23 21:16:28
你不应该自己调用视图控制器的生命周期函数。加载视图后,将调用viewDidLoad函数。
Apple:在视图控制器将其视图层次结构加载到内存后调用此方法。
因此,调用let _ = viewController.view将触发视图创建和此函数的调用。
但我认为有一个初创阶段要好得多。想想一个“启动”屏幕,它可以下载你需要的所有东西(可能有一个旋转器和一个文本),并在下载完成后自动移动到内容(选项卡栏控制器)。这也可能解决网络连通性低的问题(例如,考虑一下下载需要一分钟的时间)。您可以将该屏幕以模态方式显示在选项卡栏控制器的上方或之前。
如果你不喜欢启动阶段的想法,你也可以设计你的ui响应式。在需要时/定期开始下载,并在准备好后根据结果更新您的ui。那么ui将会很快,但会使用最新的已知数据。它的意义和实现取决于你的内容。
更新
转念一想:如果您已经有一个服务器登录屏幕,为什么不在成功下载后直接下载内容作为登录的一部分?用户不知道您是否仍在检查登录或下载某些必要的数据。您可能会说,只有成功完成服务器登录和下载,才能成功登录。
https://stackoverflow.com/questions/43567135
复制相似问题