I have a tableView and a segmentControlView which does a different query from the database but I can't get the table to reload. If I manually reload the data changes.
override func queryForTable() -> PFQuery {
var query:PFQuery = PFQuery(className:"movies")
if(objects?.count == 0)
{
query.cachePolicy = PFCachePolicy.CacheThenNetwork
}
if self.currentSegmentSelected == 0 {
query.whereKey("genres", equalTo:"Action")
query.orderByAscending("title")
}
else if currentSegmentSelected == 1 {
query.whereKey("genres", equalTo:"Comedy")
query.orderByAscending("title")
}
else if currentSegmentSelected == 2 {
query.whereKey("genres", equalTo:"Crime")
query.orderByAscending("title")
}
return query
}
And the delegate method of the SegmentControl
func segmentView(segmentView: SMSegmentView, didSelectSegmentAtIndex index: Int) {
self.currentSegmentSelected = index
queryForTable()
self.tableView.reloadData()
}
EDITED : If I used .findObjectsInThebackground like this :
override func queryForTable() -> PFQuery {
var query:PFQuery = PFQuery(className:"movies")
query.findObjectsInBackgroundWithBlock { (_: [PFObject]?, error:NSError?) -> Void in
if error == nil {
self.tableView.reloadData()
}}
'NSInternalInconsistencyException', reason: 'This query has an outstanding network connection. You have to wait until it's done.'
It's not enough to just make your query, you'll have to call it somewhere:
func segmentView(segmentView: SMSegmentView, didSelectSegmentAtIndex index: Int) {
self.currentSegmentSelected = index
queryForTable().findObjectsInBackgroundWithBlock { [weak self] objects, error in
if error == nil {
// Do whatever with `objects` and set it to your data source, whatever you named it.
self?.yourDataSourceArray = objects
self?.tableView.reloadData()
}
}
}