ウェブサイトからデータを取得し、ユーザーがボタンをクリックするとラベルに表示するはずのアプリを作った。ボタンがデータをリフレッシュしない
私の問題は、次のとおりです。
私が初めてボタンをクリックすると、それがデータを取得し、それを
を示したが、私はもう一度ボタンをクリックした場合、それは代わりに同じデータを表示しますリフレッシュされたデータのここで
は私がやったことの抜粋です:
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
2回目のプレスで 'self.quote.text = updateText'を呼び出しましたか? updatedTextと受信したデータを印刷して、同じかどうかを確認してください。 – Tj3n
@ Tj3n明らかに、データは2回目以降の 'updatedText'とは異なります。なぜ私はボタンを押すたびに 'getQuotes'(' self.quote.text = updatedText'を含む)を呼び出しているのか理解できません。ですから、ボタンを押すたびに、updatedTextをデータに設定する必要があります。 – Mehdi