TableView.reloadData() is not working ? (SWIFT)

前端 未结 3 635
失恋的感觉
失恋的感觉 2021-01-24 10:09

I am developing a Quiz App which fetches questions from a JSON. I have already used reloadData for TableView many times & worked as expected. But now I am fetching Questions

相关标签:
3条回答
  • 2021-01-24 10:49

    Sounds like you need to put the reload into the completion handler so that you have data when you try to update the UI.

    To be safe (in case of other calls to reload), you can also guard your return value in numberOfRowsInSection by checking whether there are at least 5 items in QArray.

    0 讨论(0)
  • 2021-01-24 11:06

    You need to reload your tableview inside Alamofire block

    And so it will look like

      Alamofire.request(.GET, "http://www.wis.com/index.php/capp/chapter_questions_details/\(CourseID)/\(EID)/10")
                .responseJSON { (_, _, data, _) in
                    println(data)
                    let json = JSON(data!)
                    let catCount = json.count
                    for index in 0...catCount-1 {
                        let q = json[index]["QUESTION"].string
                        self.QArray.append(q!)
                        println(self.QArray)
                    }
            self.progress.dismiss()
            self.Exam.reloadData()
      }
    

    and yes ofcourse, as per given answers and comments,

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.QArray?.count ?? 0 // will return 0 rows if QArray is empty
    }
    

    This may help!

    0 讨论(0)
  • 2021-01-24 11:09

    Use dispatch queue to call your completion handler in .responseJSON , and from there update your UI .

    E.G.

    Alamofire.request(.GET, postEndpoint, headers: headers)
            .responseJSON { response in 
    
        // Do something...
    
        dispatch_async(dispatch_get_main_queue(), {
            // Update your UI here
            self.tableView.reloadData()
         })
    }
    
    0 讨论(0)
提交回复
热议问题