Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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 AlamoFire不考虑超时间隔_Ios_Swift_Alamofire - Fatal编程技术网

Ios AlamoFire不考虑超时间隔

Ios AlamoFire不考虑超时间隔,ios,swift,alamofire,Ios,Swift,Alamofire,您确定没有强制执行4秒超时吗?我做了一个实验: class APIClient { var user = User() let alamoFireManager : Alamofire.Manager? let center = NSNotificationCenter.defaultCenter() init(){ let configuration = NSURLSessionConfiguration.defaultSessionConf

您确定没有强制执行4秒超时吗?我做了一个实验:

class APIClient {
    var user = User()
    let alamoFireManager : Alamofire.Manager?
    let center = NSNotificationCenter.defaultCenter()


    init(){
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.timeoutIntervalForRequest = 4 // seconds
        configuration.timeoutIntervalForResource = 4
        self.alamoFireManager = Alamofire.Manager(configuration: configuration)
    }

    func test(){
        //This does not respect the 4 second time out. Why?
        self.alamoFireManager!.request(.POST, CONSTANTS.APIEndpoint+"/test", parameters: parameters).responseJSON {
                        (req, res, json, error)  in
                        if let json = self.handleAPIResponse(req, res: res, json_data: json, error: error){
                        }
                    }
    }
我得到的控制台输出:

    let center = NSNotificationCenter.defaultCenter()
    var alamoFireManager : Alamofire.Manager?

    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.timeoutIntervalForRequest = 4 // seconds
    configuration.timeoutIntervalForResource = 4
    self.alamoFireManager = Alamofire.Manager(configuration: configuration)

    self.alamoFireManager!.request(.POST, "http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/2", parameters: nil).responseJSON {
        (req, res, json, error)  in
        println("First json \(json)")
        println("First error \(error)")
    }

    self.alamoFireManager!.request(.POST, "http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/6", parameters: nil).responseJSON {
        (req, res, json, error)  in
        println("Second \(json)")
        println("Second \(error)")
    }
我的示例中的URL当前已关闭,我将尝试将它们重新联机。您可以使用示例中的URL进行测试。通过在末尾设置不同的数字,可以修改超时(秒)

我用的是椰足类动物阿拉莫菲尔的最新版本

First json Optional({
    name = timeoutTest;
    value = 2;
})
First error nil
Second nil
Second Optional(Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x7f91dc8223e0 {NSErrorFailingURLKey=http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/6, NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/6})

使用
self.alamoFireManager!。请求
在同一个init函数中,超时延迟仅适用于请求,而不适用于整个函数。可能有帮助。

您需要为请求管理器创建一个全局变量:

 init(){
    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.timeoutIntervalForResource = 4
    configuration.timeoutIntervalForRequest = 4
    self.alamoFireManager = Alamofire.Manager(configuration: configuration)
    self.alamoFireManager!.request(.POST, CONSTANTS.APIEndpoint+"/test", parameters: parameters).responseJSON {
                    (req, res, json, error)  in
                    if let json = self.handleAPIResponse(req, res: res, json_data: json, error: error){
                    }
                }
}
配置自定义参数后:

var alamoFireManager = Alamofire.Manager.sharedInstance

以下是Swift 3.0/Alamofire 4.0代码,用于获取具有5秒超时的Alamofire管理器:

 let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.timeoutIntervalForRequest = 4 // seconds
    configuration.timeoutIntervalForResource = 4
    self.alamoFireManager = Alamofire.Manager(configuration: configuration)

我想这一个对您很有用,请注意,您必须在函数外部声明Alamofire.Manager的实例,请参见下面的代码

    let configuration = URLSessionConfiguration.default
    configuration.timeoutIntervalForResource = 5 // seconds

    let alamofireManager = Alamofire.SessionManager(configuration: configuration)

希望这对你有所帮助

当我使用上述方法时,我得到了NSURERRORDOMAIN。 这是我的代码(swift 3.2/Alamofire 4.4)


test
函数中设置断点,并打印
self.alamoFireManager!。session.configuration.timeoutitervalforrequest
是否假设第一次调用方法test()时,它应该有4秒的延迟?该延迟是针对http请求的,而不是针对完整的测试方法。例如,超时不适用于您的handleAPIResponse调用。您是否能够解决此问题?您创建的“中心”对象有何用途?在Alamofire 4.0的情况下,Alamofire.Manager已更改为Alamofire.SessionManager,如@Jamienot wokring所示。您能提供最新alamofire版本的代码吗?我得到:“Alamofire.SessionManager(配置:,委托:,serverTrustPolicyManager:)”我可以确认,如果在函数中声明Alamofire manager的实例,这将不起作用。Swift 2017年4月3日:应为
Alamofire.SessionManager
,和
URLSessionConfiguration.default
您可以为最新的alamofire版本提供代码吗?Tks
//Declare it out side the function
var alamoFireManager : Alamofire.Manager!

func callUrl() {
    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.timeoutIntervalForResource = 10800 // seconds
    configuration.timeoutIntervalForRequest = 10800 // seconds

    alamoFireManager = Alamofire.Manager(configuration: configuration)

    alamoFireManager.request(.POST, url, parameters: dir as? [String : AnyObject], encoding: .JSON, headers: [ "Content-Type": "application/json"])
        .responseJSON { response in
    }
}
    let manager = Alamofire.SessionManager.default
    manager.session.configuration.timeoutIntervalForRequest = 4

    manager.request(.POST, CONSTANTS.APIEndpoint+"/test", parameters: parameters).responseJSON {
                    (req, res, json, error)  in
                    if let json = self.handleAPIResponse(req, res: res, json_data: json, error: error){
                    }