我创建了一个应用程序,该应用程序应该从网站获取数据,并在用户单击按钮时将其显示在标签中。
我的问题是:
当我第一次点击该按钮时,它会获取数据并显示它
但如果我再次点击该按钮,则会显示相同的数据,而不是刷新的数据。
以下是我所做的一段话:
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)
}
}
我犯了什么错误,如何解决这个问题?
答案 0 :(得分:1)
您将dict
追加到self.array
,但随后您始终会访问self.array
中的第一个元素。这里:updateText = self.array[0]["div"] as! String
所以它总是"总是"在第一次运行时开始工作(假设在索引0处存在某些东西)但它不会工作"在后续运行中,因为索引无法按下按钮。您应该替换self.array
的内容,或者不使用数组或使用最新的索引与您按下按钮的次数。
您是否需要代码中的其他位置的数组?为什么不做self.quote.text = dict["div"] as! String