Ich habe eine VideoViewController-Klasse, die meine Datenbank-Klasse aufruft und ein loadPFObject ausführt und das ein PFObject zurückgibt.Swift iOS, wie man einen Thread pausiert
var db = VideoDatabaseHandler()
var video_titles = [String]()
var video_urls = [String]()
override func viewDidLoad() {
super.viewDidLoad()
//Load video list
let video_list = db.loadPFObject("TutorialVids")
video_titles = video_list["titles"] as! [String]
video_urls = video_list["urls"] as! [String]
self.tableView.reloadData()
}
Dann in meiner Datenbank-Klasse hier ist die Funktion des PFObject
//This function loads a PFObject from the database
func loadPFObject(category: String) -> PFObject {
let query = PFQuery(className: category)
var db_obj = PFObject(className: category)
if(category == "TutorialVids"){
query.getObjectInBackgroundWithId("vpWEueKv5O"){
(tutVideos: PFObject?, error: NSError?) -> Void in
//successfully loaded video lists
if(error == nil && tutVideos != nil) {
db_obj = tutVideos!
}
//Error loading video lists
else{
print(error)
}
}
}
print(db_obj)
return db_obj
}
Ich erhalte einen Fehler in meinem ersten Teil des Codes zurück ich auf der Linie geschrieben:
video_titles = video_list["titles"] as! [String]
Es sagt unerwartet gefunden Null beim Auspacken eines optionalen Werts.
Ich glaube, dass das loadPFObject, da es in einer anderen Klasse ist, auf einem anderen Thread ausgeführt wird und das PFObject nicht bis zum Entpacken des Zeichenfolgenwerts fertig geladen ist.
Was würde ich tun, um dies zu beheben? Sollte ich eine Timerpause im Hauptthread hinzufügen oder ist meine Annahme über die Threads völlig falsch und der Fehler ist etwas ganz anderes?
See: http://stackoverflow.com/questions/24726723/stop-pause-swift-app-for-period-of-time und http://stackoverflow.com/questions/27517632/how-to-create-a-delay-in-swift – WBT
Ist ein Schlaf/Pause die beste Methode zur Behandlung meines Problems oder gibt es eine bessere Möglichkeit zu wissen, wenn dieser Thread beendet ist ? –
Rückrufe sind besser als Schlaf, aber die Links basieren in erster Linie darauf, wie Sie Ihre Frage betitelt haben. – WBT