2015-09-28 37 views
0

我有一個tableView和一個segmentControlView它從數據庫做不同的查詢,但我無法得到表重新加載。如果我手動重新加載數據更改。Swift reloadTableView查詢後表格

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 
} 

和編輯的SegmentControl

func segmentView(segmentView: SMSegmentView, didSelectSegmentAtIndex index: Int) { 
     self.currentSegmentSelected = index 
     queryForTable() 
     self.tableView.reloadData() 
    } 

的委託方法: 如果我用.findObjectsInThebackground這樣的:

override func queryForTable() -> PFQuery { 
     var query:PFQuery = PFQuery(className:"movies") 
     query.findObjectsInBackgroundWithBlock { (_: [PFObject]?, error:NSError?) -> Void in 
      if error == nil { 

       self.tableView.reloadData() 

      }} 

'NSInternalInconsistencyException',理由是:「這個查詢有一個優秀的網絡連接。你必須等到它完成。「

+0

不可能得到你想要的東西。你想要什麼後重新加載表? – adolfosrs

+0

段被選中後,我想要重新加載表。但我認爲在queryForTable完成之前重新加載表 – PoolHallJunkie

+0

執行'PFQuery'異步工作。在返回數據後更新塊中的表 – vadian

回答

1

這是不夠的,只是讓你的查詢,你必須從某個地方把它叫做:

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

PFQuery類型的值沒有成員findObjectsInBackgroundWithCompletion – PoolHallJunkie

+0

對不起,內存必須有點模糊。它是'backgroundWithBlock'看到我的更新@PoolHallJunkie – Logan

+0

你是正確的,事實證明queryForTable不是異步的,所以findObjects裏面不好。然而,即使現在表沒有重新加載......我正在從cellForRowAtIndexPath訪問PFObject。我沒有本地存儲的數據。 – PoolHallJunkie

0

對於這類工作,你應該使用query.findObjectsInBackground。它可能會要求在你的代碼中進行一些重構,但會使你的應用程序響應得更快並且更易於用戶使用。請點擊這裏video tutorial。它可能有幫助。

this question的代碼應該更有幫助。

+0

。它鏈接到錯誤的視頻 – adolfosrs

0

我的解決辦法是錯誤的,原因有二。 首先queryForTable()不像Logan指出的那樣是異步的。 findObjectsInBackgroundWithBlock必須在外面。

但是,PFQueryTableViewController是一個解析類,其中self.tableView.reloadData()不起作用。

替代,修復:

self?.loadObjects