Wie kann ich den URLCache mit Alamofire komplett deaktivieren?
Using Xcode 7.3 iOS 9.2 alles in Swift nichts von diesem schrecklichen Ziel C Ich habe eine Weile daran gearbeitet und war jetzt dreimal im Block. Ich habe diesen Beitrag hier ausprobiert und es hat nicht funktionierthttp: //www.mzan.com/article/32199494-alamofire-how-remove-cache.shtm
Ich habe auch versucht, Apple-Dokumentation zu verwenden, aber das ist so beschissen, dass ich nicht verstehen kann, ob.
So mache ich zwei Alamofire-Anrufe an meinen Server. Eine, um die Anmeldeinformationen der Anmeldeinformationen zu testen und festzustellen, ob die Eingabe korrekt ist. Die zweite besteht darin, die Kundeninformationen herunterzuladen und zur Ansicht zurückzugeben. Beide funktionieren gut, wenn ich es das erste Mal anrufe. Das Problem ist, wenn ich mich von der App abmelde, lösche ich alle Benutzerinformationen von der Seite. Wenn ich mich jedoch während derselben Sitzung anmelde, ruft es die erste richtige Sitzung auf. Wenn ich den falschen Benutzernamen oder das falsche Passwort eingebe, wird false zurückgegeben, auch wenn ich mich beim ersten Mal korrekt anmelde. Wenn ich jedoch die Kundendaten herunterlade, werden die alten Informationen weiterhin heruntergeladen, sobald ich zum ersten Mal auf die Benutzerinformationen zugegriffen habe. Es verwendet den neuen Benutzernamen und das neue Passwort, lädt aber immer noch das alte Zeug herunter.
Dies sind meine Login- und Logout-Funktionen:
//MARK: ButtonControllers
@IBAction func onLoginClick(sender: AnyObject) {
errorMessageUI.text = "Checking Creditials"
email = userNameInput.text!
password = passwordInput.text!
buildLoginUrl = checkLoginUrl + emailTag + email + passwordTag + password
print(buildLoginUrl)
print("Login Cred")
checkLoginCredentials(buildLoginUrl)
}
@IBAction func onLogoutClick(sender: AnyObject) {
//null out everything for logout
email = ""
password = ""
self.loginInformation.setObject(self.email, forKey: "email")
self.loginInformation.setObject(self.password, forKey: "password")
self.loginInformation.synchronize()
performSegueWithIdentifier("logoutSegue", sender: self)
//self.view = LoginView
}
Und das ist die Alamofire Anrufe
//MARK: Check Credentials Method
//Function to log into the server and retrive data
func checkLoginCredentials(myUrl : String)
{
Alamofire.request(.GET, myUrl)
.validate(statusCode: 200..<300)
.responseString { response in
print("Cred Success: \(response.result.isSuccess)")
print("Cred Check: \(response.result.value)")
//clear all url chache
NSURLCache.sharedURLCache().removeAllCachedResponses()
if response.result.value != nil
{
let checker : String = response.result.value!
if checker.lowercaseString.rangeOfString("false") != nil {
self.canILogin = false
self.errorMessageUI.text = "Wrong username or Password try again"
}else{
self.canILogin = true
print("Downloading Json file for customer info")
self.loadingImage.hidden = false
self.downlaodCustomerinfo(self.customerInfoUrl, myUser: self.email, myPass: self.password)
//defaults.setBool(textColorSwitch.on, forKey: "DarkText")
self.loginInformation.setObject(self.email, forKey: "email")
self.loginInformation.setObject(self.password, forKey: "password")
self.loginInformation.synchronize()
}
print("Login? " + self.canILogin.description ?? "none" )
}else
{
//Stop the program from downloading anything to avoid crashes
self.loadingImage.hidden = true
print("I cannot download User Info")
self.errorMessageUI.text = "A connection error occured"
//set the json to be empty to avoid a crash
//reset the json file incase there is anythig in it
self.downloadJson = ""
}
}
}//end of checkLoginCredentials function
//MARK: Download Customer Infoamtion
func downlaodCustomerinfo(myUrl : String, myUser : String, myPass : String)
{
//clear all url chache
NSURLCache.sharedURLCache().removeAllCachedResponses()
print("Username: " + myUser)
print("Password: " + myPass)
print("Download Url: " + myUrl )
print("Jsonfile before download: " + self.downloadJson)
Alamofire.request(.GET, myUrl)
.authenticate(user: myUser, password: myPass)
.validate(statusCode: 200..<300)
.responseString { response in
//print("Success: \(response.result.isSuccess)")
print("Info Download: \(response.result.value)")
if response.result.value != nil{
self.downloadJson = response.result.value!
print("Json file: " + self.downloadJson)
self.parseCustomerInfo(self.downloadJson)
}else
{
self.loadingImage.hidden = true
print("I cannot download User Info")
self.errorMessageUI.text = "A connection error occured"
//set the json to be empty to avoid a crash
self.downloadJson = "{}"
}
}
}//end of download
UPDATED Code: Bewirkt, dass das System aus der Alamofire-Antwort false zurückgibt.
//Create a non-caching configuration.
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
config.requestCachePolicy = .ReloadIgnoringLocalAndRemoteCacheData
config.URLCache = nil
//Create a manager with the non-caching configuration that you created above.
let manager = Alamofire.Manager(configuration: config)
print("Username for download: " + myUser)
print("Password: " + myPass)
manager.request(.GET, myUrl)
.authenticate(user: myUser, password: myPass)
.validate(statusCode: 200..<300)
.responseString { response in
//print("Success: \(response.result.isSuccess)")
print("Info Download: \(response.result.value)")
if response.result.value != nil{
self.downloadJson = response.result.value!
print("Json file: " + self.downloadJson)
self.parseCustomerInfo(self.downloadJson)
}else
{
self.loadingImage.hidden = true
print("I cannot download User Info")
self.errorMessageUI.text = "A connection error occured"
//set the json to be empty to avoid a crash
self.downloadJson = "{}"
}
}
}//end of downloadCustomer function