2016-04-30 7 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) 
      } 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^