Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在启动时加载整个应用程序_Ios_Swift_Viewdidload - Fatal编程技术网

Ios 在启动时加载整个应用程序

Ios 在启动时加载整个应用程序,ios,swift,viewdidload,Ios,Swift,Viewdidload,我有一个选项卡式iOS应用程序,每个选项卡都有某种json请求,因此视图的加载速度非常缓慢。我想完全消除这种延迟,因此我想知道在应用程序的登录阶段是否有方法从每个类调用ViewDidLoad函数 if (login == "Success") { UserDefaults.standard.set(true, forKey: "isUserLoggedIn"); UserDefaults.standard.synchronize(); DispatchQueue.ma

我有一个选项卡式iOS应用程序,每个选项卡都有某种json请求,因此视图的加载速度非常缓慢。我想完全消除这种延迟,因此我想知道在应用程序的登录阶段是否有方法从每个类调用
ViewDidLoad
函数

if (login == "Success") {

    UserDefaults.standard.set(true, forKey: "isUserLoggedIn");
    UserDefaults.standard.synchronize();

    DispatchQueue.main.async {

        // Load all resources here

    }
}

我可以理解,如果应用程序非常大,这可能是一种不好的做法,但我认为在这种情况下,应用程序并不庞大,但视图控制器之间的延迟足以让人恼火。我宁愿让用户在开始时等待3-5秒,同时加载所有内容,并有一个平稳的体验,一旦进入。有办法做到这一点吗?

您不应该自己调用viewcontroller的生命周期功能。加载视图后,将调用viewDidLoad函数

Apple:在视图控制器将其视图层次结构加载到内存后调用此方法

因此,调用
let=viewController.view将触发视图创建和此函数的调用

但我认为最好是有一个启动阶段。考虑一个“启动”屏幕,它可以下载您需要的所有内容(可能有一个微调器和一个文本),完成后自动移动到内容(选项卡栏控制器)。这也可以解决网络连通性低的问题(例如,考虑一次需要一分钟的下载)。您可以在tabbbar控制器上方或之前以模式显示该屏幕

如果你不喜欢创业阶段的想法,你也可以设计你的用户界面。根据需要/定期开始下载,并在准备好后根据结果更新ui。用户界面会很快,但会使用最后的已知数据。其意义和实现取决于您的内容

更新


再想一想:如果您已经有了一个服务器登录屏幕,为什么不在成功下载后直接下载内容作为登录的一部分呢?用户不知道您是否仍在检查登录或下载一些必要的数据。您可能会说,只有成功完成服务器登录和下载,登录才会成功。

您只需添加一个
activityIndicator
向用户显示它正在执行json请求,并异步执行所有操作,这会让用户感觉更好,因为userActivity indicator只会向用户指示它?实际上不会加快任何速度?在应用程序启动之前执行同步调用看起来你的应用程序启动缓慢,你不希望用户有这种感觉。但是如果你真的希望这样做,请尝试执行此操作
someViewController.loadView()
@Nouman有很多应用程序在主应用程序启动前都有一个加载屏幕,屏幕上有一个完成百分比栏。将所有json数据保存在plist文件中,并根据需要在ViewController中显示。那就行了