2017-02-23 88 views
1

Я работаю над приложением викторины, которое извлекает данные из базы данных с помощью различных вызовов API. По какой-то причине, когда я пытаюсь вытащить новые данные (мы добавили/удалили викторину из базы данных), я получаю старый JSON, пока не удалю и не переустановит приложение на симулятор. Я распечатываю JSON, который извлекается, и на телефоне отображаются те же самые викторины, которые вытягиваются. Странно то, что если мы сделаем запрос в браузере, мы увидим обновленный JSON сразу после редактирования базы данных. Что более странно, так это то, что он работал нормально (обновляется, когда мы перезагружаем представление) до сегодняшнего дня, и наш обзор лидеров обновляется нормально. Парень, работающий в базе данных, клянется, что он ничего не изменил, но я не коснулся функции, которая обрабатывает вызов 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