Mein aktuelles Problem ist, dass, wenn die Funktion updateLabels
aufgerufen wird, mein TableView einfriert. Mein Ziel ist es, die Namen und Titel von Radiosendern alle 15 Sekunden zu aktualisieren. Ich habe ein dict-Array, das die Informationen und die Funktion enthält, die das dict-Array alle 15s auffüllt. Jede Station hat eine separate JSON
Link-Datei, die ich in meine getData
Funktionsparameter eingegeben habe. Was kann ich tun, um es besser zu machen und zu verhindern, dass TableView einfriert?Parsen von JSON friert tableView ein SWIFT
Hauptarray
var songNames = [
(songArtist: "", songName: ""),
(songArtist: "", songName: ""),
.....
]
Update Lieder Titel und Namen
func updateLabels() {
songNames.removeAll()
songNames.append((songArtist: getData("rd").artistName, songName: " - \(getData("record").songName)"))
songNames.append((songArtist: getData("mix").artistName, songName: " - \(getData("mix").songName)"))
tableView.reloadData()
}
erhalten Daten von JSON Link
func getData(urlPart: String) ->(artistName: String, songName: String) {
let mainURl = "http://...json"
let url = NSURL(string: mainURl)
let jsonData = NSData(contentsOfURL: url!) as NSData!
let readableJSON = JSON(data: jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil)
let songArtistName = readableJSON["ARTIST"]
let songName = readableJSON["NAME"]
return (songArtistName.description, songName.description)
}
in meinem viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
updateLabels()
//**Timer to call the function every 15 sec**
NSTimer.scheduledTimerWithTimeInterval(15, target: self, selector: #selector(self.updateLabels), userInfo: nil, repeats: true)
}
Natürlich friert es ein, wenn Sie Daten auf Haupt-Thread herunterladen. Nachschlagen, wie man es asynchron macht. – Michal
Muss ich Alamofire verwenden? –
Es ist praktisch, weil es die Standardmethode ist, aber in Ihrem Fall scheint es nicht so. Sehen Sie sich einfach an, wie die Funktionen von dispatch_async funktionieren und wickeln Sie sie um Ihren Download-Code herum. Vergessen Sie nicht, in die Hauptwarteschlange zu springen, wenn Sie die Benutzeroberfläche aktualisieren müssen! – Michal