【发布时间】:2017-02-25 15:15:29
【问题描述】:
我有一个函数,其中设置了多个查询。该功能很长,涉及很多,但效果很好,除了一个问题。有一个查询依赖于之前查询的某些信息,当之前的查询未完全完成并导致第二个查询解包 nil 值时,它偶尔会使应用程序崩溃。这是一般设置:
func QueryandAppend(completion: (() -> Void)?){
let userLinkQuery = PFUser.query()//query1
userLinkQuery?.findObjectsInBackground(block: { (objects, error) in
if let users = objects{
for object in users{
if let user = object as? PFUser{
userLinkArray[user.objectId!] = user.username
}
}
}
})
let appendingQuery = PFQuery(classname: "Stuff")//query2
appendingQuery.findObjectsInBackground { (objects, error) in
for object in objects{
creatorArray.append(userLinkArray[object["User"] as! String]!)
}
...
completion!()
}
完成处理程序用于确保在运行 viewDidLoad() 中的某些内容之前已完成整个函数(以及所有查询)。但是,我如何确保 在 函数 query1 在 query2 可以运行之前完成?
【问题讨论】:
-
查询是如何执行的,您的目标是哪个数据库?并行运行的查询是数据库的一项功能,还是您使用 GCD?
-
@kennytm 我正在使用由 heroku 托管的解析服务器作为数据库。它们并行运行并不是一个特定的功能。这只是我拥有的一般设置。我想,由于 query1 是在 query2 之前编写的,所以它总是会首先运行......在编码方面有点新
-
我假设您使用的是Parse SDK?
-
@kennytm 是的,这就是我正在使用的
标签: swift parse-platform