2017-08-05 3 views
2

ü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?

Antwort

0

Um Ihre Sitzung bereinigen unten aufrufen.

session.invalidateAndCancel() 
+0

Gleicher Fehler ... – peppinoibra

+0

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? –

+0

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

Verwandte Themen