2015-11-23 4 views
6

Ho domanda su alamofire metodi di timeout, prima di tutto, il mio inglese potrebbe non essere sufficiente per farvi ragazzi a capire quello che ho detto ... ma io stanco di spiegare la mia domanda2,1 SWIFT alamofire metodo timeout

nel mio progetto, ho usato alamofire, per qualche ragione, ho bisogno di assicurarmi che la mia app funzioni di un'area di connessione scadente. quindi sto pensando di usare il metodo timeout.

ho visto ci sono alcune persone hanno detto, utilizzare Soluzione 1:

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
    configuration.timeoutIntervalForRequest = 2 // seconds 
    self.alamofireManager = Alamofire.Manager(configuration: configuration) 
    self.alamofireManager!.request(.GET, "http://example.com/") 
.response { (request, response, data, error) in 

volontà risolto il problema, ma nel mio caso, ho visto la zona di debug ha detto la mia richiesta è "cancel"

così ho provato un'altra soluzione che ho visto qui (StackOverflow) soluzione 2:

let manager = Alamofire.Manager.sharedInstance 
    manager.session.configuration.timeoutIntervalForRequest = 5 
    manager.request(.POST, url, parameters: params, encoding: .JSON, headers: nil).response(queue: dispatch_get_main_queue()) { (Request, res, data, error) -> Void in{} 

questo metodo sembra dovrebbe funzionare, ma solo se i lascia che la mia app sia passata in secondo piano e reattivo alla mia app, l'area di debug mostra la richiesta "timeout", altrimenti l'area di debug non mostrava nulla, a meno che non lo avessi commutato in background e reattivo all'app.

sto usando Xcode 7.1 e iOS 9.0

UPDATE: se ho usato Soluzione 2, se lascio il requesttimeout = 5, l'area di debug mostrerà l ' "errore di timeout", ma ci vuole più di 5 sec ... a volte mostrerà circa 30s, ma a volte più di 1 min ....

UPDATE2: ho scoperto qual è il problema. il problema è che se si utilizza il framework reachabilty per rilevare lo stato della connessione, il sistema potrebbe rilevare che la connessione è attiva o meno, quindi mostrerà il timeout della richiesta dopo l'isReachable (potrebbe richiedere fino a 1 minuto).

+0

@oleg grazie per spiegare, nel mio caso, stavo cercando di fare il mio progetto di lavoro sulla zona povera di connessione, come ad esempio la metropolitana o in metropolitana tunnel. così ho aperto il kit di sviluppo su iphone, dove il condizionatore di rete. rendere la configurazione come perdita del 100%. quindi non so perché ci sia voluto così tanto tempo che fammi sapere è timeout .... –

+0

sei riuscito a trovare una soluzione funzionante? –

risposta

0

Sulla base NSURLSessionConfiguration Class Reference

Questa proprietà determina l'intervallo di richiesta di timeout per tutte le attività all'interno sessioni sulla base di questa configurazione. L'intervallo di timeout della richiesta controlla per quanto tempo (in secondi) un'attività deve attendere i dati aggiuntivi prima di arrendersi. Il timer associato a questo valore viene reimpostato ogni volta che arrivano nuovi dati. Quando il timer della richiesta raggiunge l'intervallo specificato senza ricevere nuovi dati, lo attiva un timeout.

Il timer viene reimpostato ogni volta che arrivano nuovi dati e questo è il motivo per cui si dispone di un tempo di errore diverso.

Inoltre è possibile impostare un parametro di più per la richiesta:

manager.session.configuration.timeoutIntervalForResource = 5