2017-02-23 148 views
1

我正在使用各种AP​​I调用从数据库中提取数据的测验应用程序。出于某种原因,当我尝试提取新数据时(我们已经添加/删除了数据库中的测验),我得到旧的JSON,直到我卸载并重新安装到模拟器上。我正在打印检索到的JSON,手机显示的是相同的测验。奇怪的是,如果我们在浏览器中执行请求,我们会在编辑数据库后立即看到更新的JSON。 What weirder是,它工作正常(更新,每当我们重新加载视图),直到今天,我们的排行榜视图正常更新。在数据库上工作的人发誓他没有改变任何东西,但我没有触及几周内处理API调用的函数。任何建议将不胜感激。我将把我在下面使用的方法。iOS应用程序重新安装应用程序后,只从数据库中提取新数据?

func getQuizTitles() { 
    let getQuizTitlesURL = URL(string: "(api_url_here)") 
    URLSession.shared.dataTask(with: getQuizTitlesURL! as URL, completionHandler: {(data, response, error) in 
     print(response as Any) 
     do{ 
      if let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSArray { 
       print(parsedData) 

       var title:String 
       var creator:String 
       var length:Int 
       var quizId:Int 
       let questions:[Question] = [] 

       for index in 0...parsedData.count-1 { 
        let aObject = parsedData[index] as! [String : AnyObject] 
        title = (aObject["Title"] as? String)! 
        if aObject["Creator"] as? String == nil { 
         creator = "" 
        }else{ 
         creator = aObject["Creator"] as! String 
        } 
        //length = aObject["Length"] 
        length = 0 
        quizId = (Int((aObject["ID"] as? String)!)!) 
        let quiz:Quiz = Quiz(title: title, creator: creator, length: length, quizId: quizId , questions: questions) 
        self.quizArray.append(quiz) 
       } 
      } 

      if let HTTPResponse = response as? HTTPURLResponse { 
       print(HTTPResponse) 
       let statusCode = HTTPResponse.statusCode 
       if statusCode == 200 { 
        print("Success") 
       } 
      } 
     }catch let error as NSError { 
      print(error) 
     } 
     DispatchQueue.main.async { 
      self.tableViewOutlet.reloadData() 
     } 
    }).resume() 

} 
+0

getQuizTitlesURL变量只是明确quizArray的阵列,像在此之后quizArray = [] – iParesh

+0

感谢您的建议,但似乎没有任何改变 –

回答

0

显然,应用程序开始缓存数据出于某种原因。我添加了这两行,并修复了它。

let configuration = URLSessionConfiguration.default 
configuration.requestCachePolicy = NSURLRequest.CachePolicy.reloadIgnoringLocalCacheData 

但是,如果您提出请求,则可以在初始化请求后添加此行。

var request: URLRequest = URLRequest(url: getQuestionsFromIdURL!) 
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringLocalCacheData 
相关问题