Я сделал приложение, которое должно получить данные с веб-сайта и отобразить его на этикетке, когда пользователь нажмет кнопку.Button not refreshing data
Мои вопросы:
при нажатии на кнопку в первый раз, он получает данные и показывает его
, но если я снова нажмите на кнопку отображает те же данные, вместо обновленных данных.
Вот отрывок из того, что я сделал:
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)
}
}
Что такое ошибка я сделал и как я могу решить эту проблему?
Что вас больше всего сработает? ваша последняя строка кода выполняет описанное вами поведение, кнопка всегда будет показывать один и тот же текст. – heximal
Он вызвал 'self.quote.text = updateText' на 2-ом нажатии ?. Попробуйте распечатать обновленный текст и полученные данные, чтобы увидеть, совпадают ли они или нет. – Tj3n
@ Tj3n. По-видимому, данные отличаются от «updatedText» на втором нажатии и после. Я не понимаю, почему, поскольку я нажимаю кнопку, я вызываю 'getQuotes' (который содержит' self.quote.text = updateText'). Поэтому я полагаю, что каждый раз, когда я нажимаю кнопку, обновленный текст должен быть установлен на данные. – Mehdi