Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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 Swift:链多网络请求,阿拉莫菲尔_Ios_Swift_Alamofire - Fatal编程技术网

Ios Swift:链多网络请求,阿拉莫菲尔

Ios Swift:链多网络请求,阿拉莫菲尔,ios,swift,alamofire,Ios,Swift,Alamofire,我有一个关于链更多网络请求(Alamofire)的问题,但是请求的数量有时可能是4,有时是9等等,这取决于目标配置。 我有一个dashboard viewcontroller,VC有4-9个嵌入式VC,每个人都必须从API获取一些数据,这就是问题所在,所有人都试图“同时”获取数据,但很多人都随机失败 我使用信号量解决这个问题,但有时请求失败,不知道为什么。我认为一个请求阻止了另一个请求或类似的请求 例如,我有: let dispatchQueue = DispatchQueue.global(q

我有一个关于链更多网络请求(Alamofire)的问题,但是请求的数量有时可能是4,有时是9等等,这取决于目标配置。 我有一个dashboard viewcontroller,VC有4-9个嵌入式VC,每个人都必须从API获取一些数据,这就是问题所在,所有人都试图“同时”获取数据,但很多人都随机失败

我使用信号量解决这个问题,但有时请求失败,不知道为什么。我认为一个请求阻止了另一个请求或类似的请求

例如,我有:

let dispatchQueue = DispatchQueue.global(qos: .background)
        dispatchQueue.async {
        if MDUtilites.isMediaPresent() {
                let _ = self.fetchMediaList()
                self.semaphore.wait()
                
            }
}
我有大约10个这样的代码块,func是:

func fetchMediaList() {
    MDApiManager.sharedInstance.fetchMediaList { (dict, status) in
        switch (status) {
        case .failed(let code, _, let description):
            print("failed:")
            print(code)
            print(description)
            self.semaphore.signal()
        case .success(_, _ , _):
            print("success")
            
            if let data = dict,
                let list = data.parseWith(type: MediaBase.self)?.list {
                self.newMedia = list
                NotificationCenter.default.post(name: Notification.Name(rawValue: MEDIA_UPDATE), object: nil)
                //                    self.mediaListSections = list
                //                    self.getCategories(data: list)
            }
            self.semaphore.signal()
        case .unknown:
            print("DEBUG: unknown fetchMediaList")
            self.fetchMediaList()
        //                self.semaphore.signal()
        case .error(let aError):
            print(aError)
            self.semaphore.signal()
        }
    }
}
如果有人能用更多的请求来解决这个问题,同时,信号量有时有效,有时无效


这是代码信号灯中的一些错误,它应该正常工作

您不需要为您的请求使用
信号灯
。由于您的请求是异步执行的/相互独立的,因此根据请求的类型,执行需要时间。每个
控制器
在将该请求加载到内存时获取该请求。在
ViewDidLoad()
中获取它们。确保将多个
控制器
正确地添加到
父控制器
控制器

使用信号量通常是个坏主意。您可以使用DispatchGroup来处理多个并发请求的结束。使用notify更简单。您的API调用是并发的还是串行的??我的意思是API是相互依赖的,或者它们将独立执行。没有API是不依赖的。这就是为什么在3-4个嵌入式VC时,begin是这样的,但现在当我有7-9个API请求时,这是一个问题,有时它们中的一些只是进入失败状态,比如说它是后端问题,但事实并非如此。我将所有这些都放在一个单例类中,这样我就可以使用信号量,但没有luckCan可以尝试在每次命中时使用url会话来命中api,而不是
Alomfire
。我的网络助手可以很好地工作,即使同时有10个或15个请求。在这方面不要尝试单例类。