2017-08-05 129 views
2

我创建了一个函数,它发送一个“GET”请求到一个amazon aws服务器,并以JSON得到响应,然后这些数据被放置在一个表中。当我第一次调用这些数据时,一切正常,但是当我回到主屏幕并再次用表格打开视图时,同样的函数失败,返回错误的头部错误,即使它第一次工作,我附加代码:Swift 3 NSMutableURLRequest第二次调用失败

功能:

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() 
} 

查看:

@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() 
     }) 
    } 
} 

错误:

{ 
    "message" : "'codeBearer' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer codeBearer'." 
} 

如果我试图通过curl发送请求,它每次都有效,而这里只在第一次执行该功能时起作用,但如果我关闭并重新打开应用程序,它将再次运行,第一次提示如何修理它?

回答

0

清理会话在下面调用。

session.invalidateAndCancel() 
+0

同样的错误... – peppinoibra

+0

好吧,那么你不能将你的数据存储到一个变量?那么第二次你不需要再打电话了?这是有道理的吗? –

+0

我通常会将数据保存在一个变量中,但有时我需要更新数据(因为它会快速更改),因此我将能够检索数据 – peppinoibra

相关问题