überhaupt habe ich eine Funktion erstellt, die eine "GET" -Anforderung an einen Amazon-Server sendet und eine Antwort in JSON erhält, und dann werden diese Daten in einer Tabelle gespeichert. Wenn ich diese Daten zum ersten Mal anrufe, funktioniert alles einwandfrei, aber wenn ich zum Home-Bildschirm zurückkehre und die Ansicht wieder mit der Tabelle öffne, schlägt die gleiche Funktion fehl und gibt einen falschen Header-Fehler zurück, obwohl es das erste Mal funktioniert hat befestigen Sie den Code:Swift 3 NSMutableURLRequest zweiten Aufruf fehlgeschlagen
Funktion:
func getData(url:String, complete: @escaping ([Int:Any]) -> Void) {
var array: [Int:Any] = [:]
let headers = [
"authorization": "Bearer codeBearer",
"cache-control": "no-cache"
]
print(headers)
print(url)
let request = NSMutableURLRequest(url: NSURL(string: url)! as URL, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error!) // errore
} else {
let input = String(data: data!, encoding: .utf8)?.data(using: .utf8) // json
let json = try! JSON(data: input!)
print(json)
for (_,subJson):(String, JSON) in json {
let num = subJson["index"].int
if(num != nil){
array[num!] = subJson
}
}
session.invalidateAndCancel()
complete(array)
}
})
dataTask.resume()
}
Ausblick:
@IBOutlet weak var table: UITableView!
func reload(){
DispatchQueue.main.async{
self.table.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
if(idCell == "cell"){
fun.getData(url: fun.request("/v1/media", test: true), complete: { success in
self.array = success
self.reload()
})
}else{
fun.getData(url: fun.request("/v1/banner", test: true), complete: { success in
self.array = success
self.reload()
})
}
}
Fehler:
{
"message" : "'codeBearer' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer codeBearer'."
}
Wenn ich versuche, die Anfrage durch die Curl zu senden, funktioniert es jedes Mal, während hier funktioniert nur das erste Mal, wenn ich die Funktion ausführen, aber wenn ich schließe und öffne die Anwendung es funktioniert wieder zum ersten Mal, Tipps, wie repariere es?
Gleicher Fehler ... – peppinoibra
Ok, dann können Sie Ihre Daten nicht in einer Variablen speichern ?. Also müssen Sie das zweite Mal nicht erneut anrufen? Ist das sinnvoll? –
Ich werde normalerweise die Daten in einer Variablen speichern, aber von Zeit zu Zeit muss ich die Daten aktualisieren (da es sich schnell ändert), so dass ich in der Lage sein werde, die Daten – peppinoibra