2016-09-29 3 views
1

Ich versuche, Alamofire Cache zu verwenden, so mein gewünschtes Verhalten wäre, das erste Mal aus dem Web zu laden und nächste Male, wenn Daten im Cache vorhanden sind, zurückgeben, ohne weitere Anfragen zu machen. .nach werde ich über das Verfallsdatum nachdenken ...Versuchen, mit Alamofire mit keinen Ergebnissen zu cachen

Mein Code gibt immer Antwort keine Antwort ... irgendwelche Vorschläge zu diesem Thema? Dank

let config = NSURLSessionConfiguration.defaultSessionConfiguration() 
    config.URLCache = NSURLCache.sharedURLCache() 
    config.requestCachePolicy = NSURLRequestCachePolicy.ReturnCacheDataElseLoad 
    let manager = Alamofire.Manager(configuration: config) 
    manager.request(.GET, url, parameters: parameters, encoding: .URL, headers: ["Token":LocalStorage.read("token") as! String, "Version":"2"]).responseJSON { (response) in 

     if let json = response.result.value 
     { 
      if response.response?.statusCode == 200 
      { 
       completionHandler(parser.parseSwifty(JSON(json)), nil) 
      } 
      else 
      { 
       completionHandler(nil, serverErrorMessage) 
      } 
     } 
     else 
     { 
      completionHandler(nil, networkErrorMessage) 
     } 

    } 

Antwort

0

So ... beschloß ich dieses Problem: in meinem NetworkHelper ich eine berechnete Eigenschaft wie so hinzugefügt:

static let manager: Manager = { 
    let memoryCapacity = 100 * 1024 * 1024; // 100 MB 
    let diskCapacity = 100 * 1024 * 1024; // 100 MB 
    let cache = NSURLCache(memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, diskPath: "shared_cache") 

    let configuration: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() 
    configuration.HTTPAdditionalHeaders = ["Token":LocalStorage.read("token") as! String, "Version":"2"] 
    configuration.requestCachePolicy = .ReturnCacheDataElseLoad // this is the default 
    configuration.URLCache = cache 

    return Manager(configuration: configuration) 
}() 

und wenn ich einige Daten abzurufen:

 self.manager.request(.GET, url, parameters: parameters, encoding: .URL) 
     .response { (request, response, data, error) in 
      debugPrint(request) 
      debugPrint(response) 
      debugPrint(error) 
    }.responseJSON...... 

Ich schreibe auch eine Funktion, um einige Daten wie folgt zu laden:

static func preloadGetRequest(url : String, parameters: Dictionary<String, String>?) 
{ 
    self.manager.request(.GET, url, parameters: parameters, encoding: .URL) 
     .response { (request, response, data, error) in 
      debugPrint(request) 
      debugPrint(response) 
      debugPrint(error) 
    } 
} 

Versuchen Sie es und lassen Sie mich wissen :)