2015-06-09 15 views
10

Ustawiam zasady dotyczące pamięci podręcznej, aby zażądać w Alamofire ignorowania lokalnej pamięci podręcznej.Ładowanie Alamofire z pamięci podręcznej nawet przy ustawieniu zasad pamięci podręcznej na ReloadIgnoringLocalAndRemoteCacheData

Następnie ładuję kontroler widokowy z połączeniem sieciowym, a następnie odłączam połączenie sieciowe, zabijam aplikację i uruchamiam ją ponownie.

Teraz brak błędu w sieci nie jest wyświetlany (np. Alamofire nie tworzy obiektu nserror), ale aplikacja działa tak, jakby żądanie udało się uzyskać dane z pamięci podręcznej oczywiście.I dziwne jest to, gdy próbowałem sprawdzić buforowane dane stosując

NSURLCache.sharedURLCache().cachedResponseForRequest(request) 

nil jest zwracany eventhough danych z pamięci podręcznej był ..

jedyny sposób mogę zapobiec buforowane odpowiedzi jest wykonać NSURLCache.sharedURLCache().removeAllCachedResponses()

let request = NSURLRequest(URL: NSURL(string: url)!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 100) 

    Alamofire.manager.request(method, request, parameters:params) 
    .responseJSON { (request, response, data, error) in 
     if let anError = error { 
      if anError.code == NSURLErrorNotConnectedToInternet { 
       UIAlertView(title: "Alert", message: "No Network Connection Available", delegate: nil, cancelButtonTitle: "ok").show() 
      }  

     } else if let data: AnyObject = data { 
      println(NSURLCache.sharedURLCache().cachedResponseForRequest(request)) 
//prints nil 

    } 

} 
} 

Co chcę zrobić, to ładować dane z pamięci podręcznej tylko wtedy, gdy połączenie sieciowe nie jest dostępne, coś w rodzaju ograniczonego trybu offline. Jak to zrobić?

Odpowiedz

10

Używam ten sposób w projekcie i to działa:

let mutableURLRequest = NSMutableURLRequest(URL: SERVICEURL) 
mutableURLRequest.HTTPMethod = "POST" 

mutableURLRequest.HTTPBody = self.createJson() 
mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") 
mutableURLRequest.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData 

request(mutableURLRequest).validate().responseJSON{ response in... 

Nadzieję, że to pomaga.

+0

Dzięki. To działało idealnie. – iksnae

+0

jaka jest prośba? –

+0

@HongZhou Jest to wygodna metoda Alamofire. Można go użyć jako 'Alamofire.request (mutableURLRequest) .validate(). ResponseJSON {odpowiedź w ...' –

1

Dzięki @ FábioSalata mi rozwiązać mój problem tak.

var req = URLRequest(url: URL(string: "<URL>")!) 
req.httpMethod = "GET" 
req.setValue("application/json", forHTTPHeaderField: "Content-Type") 
req.setValue("<Auth KEY>", forHTTPHeaderField:"Authorization") 
req.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData 

Alamofire.request(req).validate().responseJSON { response in ... 
Powiązane problemy