【问题标题】:reloadData() isn't work in swiftreloadData() 不能快速工作
【发布时间】:2016-03-15 17:51:58
【问题描述】:

所以,我遇到了麻烦 - 无法重新加载 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
    }

【问题讨论】:

  • 您的代码中没有重新加载
  • 我问必须在哪里重新加载

标签: ios swift uitableview reloaddata


【解决方案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】:
    func getTmp(){
    
            infoTmp = NSMutableArray()
            infoTmp = getInfo()
            tbRouteData.reloadData()
        }
    

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

    【讨论】:

    • 谢谢,但它不起作用,tableView 没有重新加载。在模拟器中,我看到 idMeet = 1 时的信息,但 idMeet = 2(它在命令行中看到)
    • 您是否曾经在 tableVIew 中看到过数据?您是否链接了数据源和数据委托?是否调用了 tableView 方法?
    • 不,我没有在 tableView 中看到新数据。我看到点击按钮后“idMeet”发生了变化,但tableView中的数据没有变化。是的,数据源和数据委托已链接。
    【解决方案3】:

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

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

    【讨论】:

    • 谢谢,但它不起作用,tableView 没有重新加载。在模拟器中,我看到 idMeet = 1 时的信息,但 idMeet = 2(它在命令行中看到)
    • 您是否能够打印新数据以确保其正确填充?可能是刷新正确但数据没有变化
    • 所以,点击后我从数据库的命令行中获取新数据,我将搜索我的新数据不想重新加载的位置。这是第一次,因为在下一个VC中我没有那么问题..
    • 我看到 func tableView 得到了很好的新数据,因为当 print(my.Name) 我看到来自 DB 的新数据,但在模拟器中我看到旧数据(无需重新加载)
    • 不看应用很难说是什么问题。确保你尝试运行其他函数底部的 reloadData 函数,看看它是否有任何效果
    【解决方案4】:

    通常当 tableView 数据数组改变时 tableView 应该重新加载。在这种情况下,在按钮操作方法的末尾重新加载 tableview。

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

    【讨论】:

    • 不工作,tableView 没有重新加载。在模拟器中,我看到 idMeet = 1 时的信息,但 idMeet = 2(它在命令行中看到)
    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 2014-10-22
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多