私は、複数のクエリを設定した関数を持っています。この機能は長くて、多くの作業が必要ですが、問題は1つではありませんが、完全に機能します。以前のクエリでいくつかの情報に依存するクエリがあり、前のクエリが完全に完了せず、2番目のクエリが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()
で何かを実行する前に完了しています。しかし、の中での中にquery2が実行される前に関数query1が確実に行われるようにするにはどうすればよいですか?
として、良い約束のフレームワークを見てみましょう可能性がどのように正確にクエリが実行され、そしてどのデータベースあなたがターゲットとしていますか?並行して実行されるクエリがデータベースの機能であるか、GCDを使用していますか? – kennytm
@kennytm私はDBとしてherokuによってホストされている解析サーバを使用しています。並行して動作するものは特別な機能ではありません。私が持っていたのは単なる一般的な設定でした。私は、query1がquery2の前に書かれていたので、常に最初に実行されると考えました。 –
[Parse SDK](https://parseplatform.github.io/docs/ios/guide/)を使用していると仮定します。 )? – kennytm