2017-07-25 3 views
2

Mein Problem ist sehr kompliziert zu erklären, also werde ich mein Bestes tun, um es zu erklären.Wie aktualisiere ich eine UITableView auf einen Timer beim Scrollen

Ich mache eine schnelle Anwendung mit TableView. In dieser TableView habe ich einige Daten, die in lokalen (Dictionnary, Arrays, var, ...) gespeichert sind. Also, in meinem TableView aktualisiere ich diese Daten alle 0,01 Sekunden. Wenn ich dann in meinem TableView blättere, wird diese Aktualisierung gestoppt und ich möchte sie nicht. Ich möchte eine "Aktualisierung fortsetzen".

Jemand kann erklären, wie ich es tun kann? Ich suche auf StackOverflow und die beste Antwort ist: der Thread. Ich habe Thread in C verstanden, aber es ist sehr vage für mich in Swift. Wenn Sie eine Übung für Zug Multithreading in Swift haben, können Sie es posten!

Danke für Ihre Zeit.

P.S: Ich kann etwas Code posten, aber ich denke nicht, dass es wirklich notwendig für meine Frage ist.

EDIT:

Es ist der Code für den Timer und aktualisieren

override func viewDidLoad() { 
    timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, 
    selector:#selector(ViewController.updateTimer), userInfo: nil, 
    repeats: true) 
} 

func updateTimer() { 
    var j = 0 
    for _ in rows { 
    if (rows[j]["Activ"] as! Bool == true) { 
     rows[j]["timer"] = (rows[j]["timer"] as! Double + 0.01) as AnyObject 
    } 
    j += 1 
    } 
myTableView.reloadData() 
} 
+0

Zeigen Sie den Code an, der den Timer ausführt und die Aktualisierung aufruft. Das Problem besteht darin, dass das Tabellenupdate und der Scroll im Hauptthread durchgeführt werden müssen. Selbst wenn du einen anderen Thread hättest, würde das nicht helfen. –

+0

@LouFranco Danke für Ihre Antwort. Ich habe meine Frage mit Code bearbeiten! – pierreafranck

+2

Aktualisieren Sie Ihre Benutzeroberfläche alle 0,01 Sekunden macht keinen Sinn, da der Bildschirm nicht so schnell aktualisiert werden kann. Ihre Aktualisierungshäufigkeit sollte nicht mehr als 1/30 s (30 FPS) betragen. –

Antwort

2

Also, es, weil die Timer Werke in derselben DispatchQueue wie Scrollen in der UITableView passiert. Sie können dieses Problem lösen, indem Sie beispielsweise AsyncTimer verwenden.

+0

danke für deine antwort kumpel. Ich kenne AsyncTimer, möchte aber wenn möglich keine Pods für dieses Projekt verwenden. – pierreafranck

+0

Dann können Sie Quellcode aus Pod kopieren (MIT-Lizenz) –

+0

Ja, es ist wahr. Wenn ich nichts finde, werde ich es tun;) Aber ich denke, eine native Methode funktioniert für meine Bedürfnisse. – pierreafranck

Verwandte Themen