Alamofire:有时会在没有任何特殊原因的情况下发生超时
Alamofire: Timeout happening sometimes without any particular reason
有时在启动应用程序时,所有请求都会超时并显示这些日志:
| request: <NSMutableURLRequest: 0x170006aa0> { URL: http://#host#/api/settings?version=1428591014 }
| response: nil
| json: nil
| error: Optional(Error Domain=NSURLErrorDomain Code=-1001 "La requête a expiré." UserInfo=0x1740f0380 {NSUnderlyingError=0x174056440 "L’opération n’a pas pu s’achever. (kCFErrorDomainCFNetwork erreur -1001.)", NSErrorFailingURLStringKey=http://#host#/api/settings?version=1428591014, NSErrorFailingURLKey=http://#host#/api/settings?version=1428591014, NSLocalizedDescription=La requête a expiré.})
这里是负责请求调用的代码示例:
Alamofire.request(AppRouter.Settings.RetrieveAppSettings(Settings.sharedInstance.version))
.validate(contentType: ["application/json"])
.validate(statusCode: [200])
.responseJSON { (req, res, json, error) in
if error != nil {
// log error to local file
}
else {
// do something with data
}
}
发生这种情况时,所有请求都将失败并显示相同的日志。必须手动终止应用程序(主页按钮)并重新启动它,然后所有请求都会成功......
有人有想法吗?
据我所知,我遇到过同样的问题。这是一个默认情况下不允许使用较新版本的 Xcode 的 http 连接的问题。我在切换到 Xcode-beta 7.0 时遇到了这个问题,但也可能是更早的版本。
尝试将以下内容添加到您的 info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>--- YOUR DOMAIN NAME HERE - EXAMPLE: example.com ---</key>
<dict>
<key>NSIncludeSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
这允许 http 连接到您想要的域。在 NSExceptionDomains 对应的字典中添加任意数量的域作为键字典对。
要将其作为 XML 插入,请右键单击 info.plist,然后单击 "Open as" -> "Source code"。
然后将上面的 XML 添加到文档末尾的标签之前。
希望这对你有用:)
有时在启动应用程序时,所有请求都会超时并显示这些日志:
| request: <NSMutableURLRequest: 0x170006aa0> { URL: http://#host#/api/settings?version=1428591014 }
| response: nil
| json: nil
| error: Optional(Error Domain=NSURLErrorDomain Code=-1001 "La requête a expiré." UserInfo=0x1740f0380 {NSUnderlyingError=0x174056440 "L’opération n’a pas pu s’achever. (kCFErrorDomainCFNetwork erreur -1001.)", NSErrorFailingURLStringKey=http://#host#/api/settings?version=1428591014, NSErrorFailingURLKey=http://#host#/api/settings?version=1428591014, NSLocalizedDescription=La requête a expiré.})
这里是负责请求调用的代码示例:
Alamofire.request(AppRouter.Settings.RetrieveAppSettings(Settings.sharedInstance.version))
.validate(contentType: ["application/json"])
.validate(statusCode: [200])
.responseJSON { (req, res, json, error) in
if error != nil {
// log error to local file
}
else {
// do something with data
}
}
发生这种情况时,所有请求都将失败并显示相同的日志。必须手动终止应用程序(主页按钮)并重新启动它,然后所有请求都会成功......
有人有想法吗?
据我所知,我遇到过同样的问题。这是一个默认情况下不允许使用较新版本的 Xcode 的 http 连接的问题。我在切换到 Xcode-beta 7.0 时遇到了这个问题,但也可能是更早的版本。
尝试将以下内容添加到您的 info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>--- YOUR DOMAIN NAME HERE - EXAMPLE: example.com ---</key>
<dict>
<key>NSIncludeSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
这允许 http 连接到您想要的域。在 NSExceptionDomains 对应的字典中添加任意数量的域作为键字典对。
要将其作为 XML 插入,请右键单击 info.plist,然后单击 "Open as" -> "Source code"。
然后将上面的 XML 添加到文档末尾的标签之前。
希望这对你有用:)