按钮没有刷新数据

时间:2016-03-29 11:01:11

标签: ios swift uibutton

我创建了一个应用程序,该应用程序应该从网站获取数据,并在用户单击按钮时将其显示在标签中。

我的问题是:

  1. 当我第一次点击该按钮时,它会获取数据并显示它

  2. 但如果我再次点击该按钮,则会显示相同的数据,而不是刷新的数据。

  3. 以下是我所做的一段话:

    import UIKit
    import Osmosis
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var quote: UILabel! // My label supposed to display data
    
        @IBOutlet weak var refreshButtonContent: UIButton! // My button
    
        var array: [[String: AnyObject]] = []
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
    
            self.quote.text = "No Data yet" // Initate my label
    
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        /* The following function gets the data contain in a div on a website 
         and displays the data in the label
        */
    
        func getQuotes() {
    
            var updateText: String = ""
    
            Osmosis(errorHandler: { (error) -> Void in
                dispatch_async(dispatch_get_main_queue()) {
                    self.quote.text = "Error 500."
                }
                print(error)
            })
                .get(NSURL(string: "http://www.exemple.com")!)
                .find(OsmosisSelector(selector: ".wrapper"), type: .CSS)
                .populate([
                    OsmosisPopulateKey.Single("div") : OsmosisSelector(selector: ".div")
                    ], type: .CSS)
                .list { (dict) -> Void in
                    self.array.append(dict)
    
                    // Cast self.array[0] to String
                    updateText = self.array[0]["div"] as! String
    
    
    
               // Truncate the string to remove unwanted /n /t
                updateText.removeAtIndex(updateText.startIndex)
                updateText.removeAtIndex(updateText.startIndex)
                updateText.removeAtIndex(updateText.endIndex.predecessor())
    
                    print(updateText)
                    //Update UI by the main thread (to avoid slow display update)
                    dispatch_async(dispatch_get_main_queue()) {
                        self.quote.text = updateText
                    }
                }
                .start()
        }
    
        // Actions made when the button is pressed
    
        @IBAction func refreshButton(sender: AnyObject) {
    
            getQuotes()
            refreshButtonContent.setTitle("Refresh Data", forState: .Normal)
        }
    
    }
    

    我犯了什么错误,如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您将dict追加到self.array,但随后您始终会访问self.array中的第一个元素。这里:updateText = self.array[0]["div"] as! String

所以它总是"总是"在第一次运行时开始工作(假设在索引0处存在某些东西)但它不会工作"在后续运行中,因为索引无法按下按钮。您应该替换self.array的内容,或者不使用数组或使用最新的索引与您按下按钮的次数。

您是否需要代码中的其他位置的数组?为什么不做self.quote.text = dict["div"] as! String