2016-09-20 19 views
5

Tôi đang sử dụng RequestRetrier của Alamofire 4.0 để kiểm soát việc thử lại yêu cầu mã thông báo truy cập đã hết hạn. Tôi đang theo dõi tài liệu here.Yêu cầuRetrier Alamofire 4.0 nên (_, thử lại, với, hoàn thành) không được gọi là

Tôi có triển khai rất giống với ví dụ có sẵn trong tài liệu OAuth2Handler triển khai RequestAdapterRequestRetrier.

Vấn đề tôi đang gặp phải là func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) không bao giờ được gọi. Phương pháp adapt thực hiện RequestAdapter được gọi là mặc dù.

Gỡ lỗi, tôi thấy rằng SessionDelegate chỉ gọi should(_,retry,with,completion) khi có lỗi, nhưng yêu cầu trả lại mã trạng thái có liên quan đến vấn đề Cấp quyền, dường như không tạo lỗi, do đó phương pháp đó không bao giờ được gọi.

Tôi có thiếu gì đó ở đây không?

Trả lời

11

Có thể bạn không gặp lỗi. 400 câu trả lời không được coi là lỗi bởi Alamofire. Trong trường hợp bạn muốn gặp lỗi khi nhận mã 400, bạn nên chuỗi validate() theo yêu cầu. Nếu đây là trường hợp của bạn, bạn có thể tìm thêm thông tin here.

+1

Quên để gọi xác thực! Đó là nó, cảm ơn @crisisGriega! –

8

Theo ví dụ trong chính xác documentation, tôi không hoạt động. Tôi đã sử dụng validate() như được hiển thị trong ví dụ.

let sessionManager = SessionManager() 
sessionManager.adapter = oauthHandler 
sessionManager.retrier = oauthHandler 
let urlString = "\(baseURLString)/some/endpoint" 

sessionManager.request(urlString).validate().responseJSON { response in 
debugPrint(response) 
} 

Mặc dù, sau khi thay thế SessionManager() với Alamofire.SessionManager.default, phương pháp func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) được gọi.

let sessionManager = Alamofire.SessionManager.default 
+0

Bạn đã tìm ra lý do tại sao điều này đang xảy ra, tôi có cùng một vấn đề – Andrea

+0

@Andrea Không, tôi không có. – Ashildr

+0

Cần điều đó quá, để làm cho nó hoạt động: hãy để sessionManager = Alamofire.SessionManager.default –

Các vấn đề liên quan