2016-03-31 3 views
0

Я использую Alamofire для отправки HTTP-запроса в моем приложении. Я использую TabBarViewController, в ViewDidLoad первого представления я отправляю запрос. Также в ViewWillDisappear я отправляю другой запрос. Тем не менее, я обнаружил, что он ведет себя непредсказуемо, когда я меняю вкладки.Http-запрос с использованием Alamofire

func sendHttpCommand(parameter: NSDictionary) { 
    Alamofire.request(.GET, URL, parameters: (parameter as! [String: AnyObject])) 
      .response { 
       request, response, data, error in 
       print(request) 
      } 
} 

viewDidLoad() { 
    let dict: NSDictionary = ["value": 0] 
    sendHttpCommand(dict) 
} 

viewWillDisappear(animated: Bool) { 
    let dict: NSDictionary = ["value": 1] 
    sendHttpCommand(dict) 
} 

Когда я переключая вкладки в нормальном случае, моя консоль будет распечатать

Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 

Однако, когда я переключая вкладки достаточно быстро, моя консоль будет распечатать

Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=1}) 
Optional(NSMutableURLRequest {URL: xxxxx/value=0}) 

Любые идеи?

ответ

2

Запросы alamofire выполняются async.

Читайте здесь, чтобы понять asyncs и синхронизирует: Difference between dispatch_async and dispatch_sync on serial queue?

Вы можете отменить свой запрос alamofire при изменении вкладки и запрос не закончен. Для этого вам нужен менеджер Alamofire.

+0

Как я могу сделать запрос на заказ? Я попытался использовать 'dispatch_group'. Однако, похоже, я не работаю. [link] (http://stackoverflow.com/questions/28100847/checking-for-multiple-asynchronous-responses-from-alamofire-and-swift) – WeiJay

+0

вам нужно вызвать следующий запрос в вашем обработчике ответов. Или используйте делегат и запустите его в своем обработчике ответа, чтобы запустить следующий запрос. Вы также можете отменить свой запрос, если пользователь изменит вкладку http://stackoverflow.com/questions/26305707/how-to-pause-resume-cancel-my-download-request-in-alamofire – Sebi

Смежные вопросы