Swift iOS如何暂停一个线程

时间:2016-04-30 04:16:09

标签: swift multithreading pause

我有一个VideoViewController类,它调用我的数据库类并执行loadPFObject并返回一个PFObject。

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。

我该怎么做才能解决这个问题?我应该在主线程中添加一个计时器暂停,还是我对线程完全错误的假设,错误是完全不同的?

1 个答案:

答案 0 :(得分:0)

您需要执行访问异步回调中的标题和网址的代码。

使用:

<td><form action="controller/edit" method="post">
    <input type="hidden" name="id" value="<?php echo $id ?>">
    <input type="hidden" name="name" value="<?php echo $name ?>">
    <input type="hidden" name="amount" value="<?php echo $amount ?>">
    <input type="submit" value="edit">
</form></td>

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()
    }
}