2016-01-30 25 views
4

我想储存我的曲奇,这样当我重新打开应用程序时,我可以恢复先前实例中储存的曲奇。 要初始化alamofire我使用:在Alamofire(Swift)中保存曲奇

let manager = Alamofire.Manager.sharedInstance 

而且我的代码加载饼干是:

let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headerFields, forURL: URL) 
Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil) 

但是,当我重新启动手机也很难忘记所有的饼干。

回答

5

1.新增方法保存cookies在NSUserDefaults

func setCookie (cookie:NSHTTPCookie) 
{   
    NSUserDefaults.standardUserDefaults().setObject(cookie.properties, forKey: "kCookie") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

2.And方法重新启动后取回他们的请求

func getCookie() -> NSHTTPCookie 
{ 
    let cookie = NSHTTPCookie(properties: NSUserDefaults.standardUserDefaults().objectForKey("kCookie") as! [String : AnyObject]) 
    return cookie! 
} 

3.Retrieve饼干Alamofire

let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(response.response?.allHeaderFields as! [String: String], forURL: (response.response?.URL!)!) 

//Save method 
setCookie(cookies.first!) 

4.在任何请求之前重新启动后使用getCookie方法

NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(getCookie()) 

IMORTANT注:在夫特2.2

5

测试夫特3和Alamofire 4.4

1.增加的方法保存的Cookie中UserDefaults

func saveCookies(response: DataResponse<Any>) { 
    let headerFields = response.response?.allHeaderFields as! [String: String] 
    let url = response.response?.url 
    let cookies = HTTPCookie.cookies(withResponseHeaderFields: headerFields, for: url!) 
    var cookieArray = [[HTTPCookiePropertyKey: Any]]() 
    for cookie in cookies { 
     cookieArray.append(cookie.properties!) 
    } 
    UserDefaults.standard.set(cookieArray, forKey: "savedCookies") 
    UserDefaults.standard.synchronize() 
} 

2.使用saveCookies ()in Alamofire

Alamofire.request(urlString).responseJSON { response in 
    saveCookies(response) 
} 

3.添加方法之前Alamofire.request()

+0

完美的,很明确的阐述,从UserDefaults加载饼干

func loadCookies() { guard let cookieArray = UserDefaults.standard.array(forKey: "savedCookies") as? [[HTTPCookiePropertyKey: Any]] else { return } for cookieProperties in cookieArray { if let cookie = HTTPCookie(properties: cookieProperties) { HTTPCookieStorage.shared.setCookie(cookie) } } } 

4.使用loadCookies():) – fane89