データベース クラスを呼び出して loadPFObject を実行し、PFObject を返す VideoViewController クラスがあります。
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()
}
次に、私のデータベース クラスには、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
}
行に投稿したコードの最初の部分でエラーが発生し続けます。
video_titles = video_list["titles"] as! [String]
Optional 値のラップ解除中に予期せず nil が見つかったと表示されます。
loadPFObject は別のクラスにあるため、別のスレッドで実行され、その文字列値をアンラップするまでに PFObject のロードが完了していないと思います。
これを修正するにはどうすればよいですか? メインスレッドにタイマー一時停止を追加する必要がありますか、それともスレッドに関する私の仮定が完全に間違っていて、エラーはまったく別のものですか?