gpt4 book ai didi

ios - 应用程序首次启动时将网络请求放在哪里

转载 作者:搜寻专家 更新时间:2023-11-01 06:14:18 25 4
gpt4 key购买 nike

当应用程序启动时,我需要做一些网络请求。例如,App 获取我的服务器公钥以运行安全的 restful 连接。如果它能拿到 key ,它就会做其他的网络操作。我的问题是这些操作是嵌套的,所以一个完成,另一个开始,但如果其中一个有问题,我需要显示一条消息。我有 AppDelegate 类和 SplashViewController,我可以在其中执行这些操作。这样做时,我不确定在速度方面最好的方法是什么;

1-) 在 AppDelegate 中开始操作并带有通知,如果有错误,通知 splashviewcontroller 并显示消息。

2-)在 SplashViewController 类中开始操作。

3-)在打开 SplashViewController 之前等待所有网络操作完成(我不确定是否可以在 AppDelegate 类中显示错误消息)

我在 AppDelegate 上运行的示例代码;

 APIClient.checkCMS { (result) in
switch result{
case .error(let error):
print(error)
//Notify SplashViewController?
case .success(let returnedObject):
print(returnedObject)
print("Devam")
}
}

最佳答案

事实上,您甚至考虑在这里使用通知在 View Controller 之间进行通信,这可能是一种代码味道。我认为 AppDelegate 方法肯定是错误的。

我对您的应用做出了一些可能不正确的假设,即您正在使用 Storyboard/xibs,并且您的 SplashVC 将在应用运行时被实例化和呈现,而不管网络调用的状态如何(即,应用程序不会挂起,直到知道网络调用的结果)。

在这种情况下,如果您从 AppDelegate 进行调用,您将使用 NSNotificationCenter 来更新 SplashVC。这似乎是个坏主意,因为它给设计带来了不必要的复杂性。如果您在代码中手动加载 VC,您可能 只是可以想象AppDelegate 执行所有操作,但即便如此,您可能真的不希望应用程序在网络调用完成。

我的处理方式如下:

  1. (如果您还没有这样做)将所有网络请求封装到某种服务对象中。然后你可以在单例范围内使用依赖注入(inject)(可能使用 Swinject 或其他类似的库)。这将允许您从应用程序中需要的任何地方发出网络请求。

  2. 有一个默认的 VC(可能是 SplashVC,或者其他一些根 VC)首先加载并且依赖从 1 注入(inject)网络服务

  3. 在 SplashVC 的 viewDidLoad 中进行调用。适本地处理错误,(通过显示警报,或通过呈现自定义模态 VC,或任何你喜欢的。这避免了如果请求很慢,应用程序只显示黑屏)。

关于ios - 应用程序首次启动时将网络请求放在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com