2016-03-15 85 views
-1

所以,我有麻煩 - 無法重新裝載TableView的數據,在命令行我看到好數據 - 當我點擊按鈕idMeet被更改,但在模擬器中我看不到刷新點擊按鈕後的表格視圖,並且idMeet已更改,我的查詢也已更改。我明白我必須使用tableView.reloadData(),但不明白在哪裏編寫正確的工作?reloadData()不在快速工作

var x = true; 

     @IBOutlet weak var myButton: UIButton! 
     @IBOutlet var tbRouteData: UITableView! 
     @IBAction func act(sender: UIButton) { 
      x = !x 
      getInfo() 
     } 

     override func viewDidLoad() { 
      super.viewDidLoad() 
     } 

     override func viewWillAppear(animated: Bool) { 
      self.getTmp() 
     } 

     func getInfo() -> NSMutableArray { 
      sharedInstance.database!.open() 
     var idMeet: Int 
     if x { 
       idMeet = 1 
      } else { 
       idMeet = 2 
      } 

      print(idroute) 

      let selectInfo: FMResultSet! = sharedInstance.database!.executeQuery("SELECT * FROM t1 AS one JOIN t2 AS two ON (one.id = two.id AND two.line_id = ?) ORDER BY two.position ASC", withArgumentsInArray: [idMeet]) 
    ... 
      return tmp 
     } 

    func getTmp(){ 

     infoTmp = NSMutableArray() 
     infoTmp = getInfo() 
    } 


    // MARK: - Table view data source 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return infoTmp.count 
    } 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! PrivateCell 

     let my:Info = infoTmp.objectAtIndex(indexPath.row) as! Info 
     cell.listOfStop.text = my.Name.uppercaseString 
     return cell 
    } 
+1

有在你的代碼 – Sulthan

+0

沒有重裝我問哪裏重載必須 –

回答

1

有幾個問題在這裏:

  1. getTmp功能應該重新加載數據:

    func getTmp(){ 
        infoTmp = getInfo() 
        tbRouteData.reloadData() 
    } 
    
  2. 現在你有一個功能,填充財產和重新加載表,act應該調用,而不是getInfo

    @IBAction func act(sender: UIButton) { 
        x = !x 
        getTmp() 
    } 
    

    當您撥打getInfo時,不會設置infoTmp。並致電getTmp,集中了infoTmp的人口並重新裝載在一個地方。

  3. 如果您在表格視圖中沒有看到任何數據,請確保您已相應地設置了表格視圖的delegate。你可以做到這一點無論是在IB,或編程:

    override func viewDidLoad() { 
        super.viewDidLoad() 
        tbRouteData.delegate = self 
    } 
    

    這是假設,當然,前提是你定義您的視圖控制器符合UITableViewDataSource,並實施適當的方法。在沒有看到這些方法的情況下,我們無法確定是否會出現更多問題。

0

通常當tableView數據數組發生變化時,tableView應該重新加載。在這種情況下,在按鈕操作方法的末尾重新加載tableview。

@IBAction func act(sender: UIButton) { 
     x = !x 
     getInfo() 
     tbRouteData.reloadData() 
} 
+0

不工作,的tableView不重裝。在模擬器中,我看到idMeet = 1時的信息,但是idMeet = 2(它在命令行中看到) –

1
func getTmp(){ 

     infoTmp = NSMutableArray() 
     infoTmp = getInfo() 
     tbRouteData.reloadData() 
    } 

編寫代碼和陣列填滿

+0

謝謝,但它不工作,tableView沒有重新加載。在模擬器中,我看到了idMeet = 1時的信息,但是idMeet = 2(它在命令行中看到) –

+0

你是否曾經看到過tableVIew中的數據?你有鏈接數據源和數據代表嗎? tableView方法是否被調用? – Russell

+0

不,我沒有在tableView中看到新的數據。點擊按鈕後,我看到「idMeet」被改變,但tableView中的數據沒有改變。是的,數據源和數據代表已鏈接。 –

0

重裝數據應該在按鈕中,但如果是getinfo()之後一直完成後,這將重新加載新的數據你的tableview完成。下面應該工作:

@IBAction func act(sender: UIButton) { 
     x = !x 
     getInfo() 
     tbRouteData.reloadData() 
    } 
+0

謝謝,但它不工作,tableView不重新加載。在模擬器中,我看到idMeet = 1時的信息,但idMeet = 2(它在命令行中看到) –

+0

您是否能夠打印新數據以確保其正確填充?它可能是正確刷新,但數據沒有改變 –

+0

所以,點擊後,我從數據庫的命令行中獲得新的數據,我會搜索我的新數據不想重新加載。這是第一次,因爲在下一個VC我沒有這樣的問題.. –