2016-04-30 50 views
2

我有一個VideoViewController類,它調用我的數據庫類並執行loadPFObject並返回一個PFObject。Swift iOS如何暫停線程

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] 

它說意外地發現零,同時展開一個可選值。

我相信loadPFObject,因爲它在不同的類上運行在不同的線程上,並且在打開該字符串值的時候沒有完成加載PFObject。

我該怎麼做才能解決這個問題?我應該在主線程中添加計時器暫停還是我對線程的假設完全錯誤,錯誤是完全不同的?

+0

參見:http://stackoverflow.com/questions/24726723/stop-pause-swift-app-for-period-of-time和http://stackoverflow.com/questions/27517632/how-to-create-a-delay-in-swift – WBT

+0

睡眠/暫停是處理我的問題的最佳方法還是有一個更好的方法來知道什麼時候該線程完成? –

+0

回調比睡眠好,但鏈接主要基於您如何命名您的問題。 – WBT

回答

0

您需要執行訪問異步回調中的標題和URL的代碼。

用途:

var db = VideoDatabaseHandler() 
var video_titles = [String]() 
var video_urls = [String]() 


override func viewDidLoad() { 
    super.viewDidLoad() 

    //Load video list 
    db.loadPFObject("TutorialVids") { video_list in 
     video_titles = video_list["titles"] as! [String] 
     video_urls = video_list["urls"] as! [String] 
     self.tableView.reloadData() 
    } 
} 

//This function loads a PFObject from the database 
func loadPFObject(category: String, onSuccess: (PFObject -> Void)){ 
    let query = PFQuery(className: category) 

    if(category == "TutorialVids"){ 
     query.getObjectInBackgroundWithId("vpWEueKv5O"){ 
      (tutVideos: PFObject?, error: NSError?) -> Void in 

      //successfully loaded video lists 
      if(error == nil && tutVideos != nil) { 
       onSuccess(tutVideos!) 
      } 

       //Error loading video lists 
      else{ 
       print(error) 
      } 
     } 
    } 
}