reloadData()在swift

时间:2016-03-15 17:51:58

标签: ios swift uitableview reloaddata

所以,我有麻烦 - 无法重载TableView的数据,在命令行中我看到了好的数据 - 当我点击按钮idMeet被更改时,但在模拟器中我没有看到点击后的刷新表视图按钮,idMeet已更改,我的查询也已更改。我知道我必须使用tableView.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
    }

4 个答案:

答案 0 :(得分:1)

func getTmp(){

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

编写此代码,这将在数组填满后使用新数据重新加载您的tableview

答案 1 :(得分: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并已实施适当的方法。如果没有看到这些方法,我们无法判断是否存在某些进一步的问题。

答案 2 :(得分:0)

通常当tableView数据数组被更改时,tableView应该重新加载。在这种情况下,在按钮操作方法结束时重新加载tableview。

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

答案 3 :(得分:0)

重新加载数据应该在按钮内完成,但是在getInfo()完成之后。以下应该有效:

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