私の問題は次のとおりです。すべての引数には実際に他の引数のobjectIdであるparentIdがある引数クラスがあります。私はこの種の親子関係でお互いに接続されているすべての引数のリストを取得することができるクエリを記述したいと思います。だから私はループ内のParseクエリで変数を使用したときに変数が値を変更しない理由
class ArgumentViewController: UIViewController {
var all = [String]()
var temporaryId = "vEKV1xCO09"
override func viewDidLoad() {
super.viewDidLoad()
for _ in 1...3 {
let query = PFQuery(className: "Argument").whereKey("objectId", equalTo: temporaryId)
query.findObjectsInBackground { (objects, error) in
if let arguments = objects {
for argument in arguments {
self.all.append(argument["parentId"] as! String)
print(self.all)
self.temporaryId = argument["parentId"] as! String
}
}
}
}
}
。これを試してみましたが、問題は、それ自体が更新されないループ内temporaryIdされます。それはすべてのiterartionsで同じままです。したがって、私がprint(self.all)を実行するとき、私は単純に3つの文字列の配列を取得し、すべて最初の引数の親です。
私の目標は、最初の引数の親、私の最初の議論、私の親の親の親...]
私は類似のトピックを検索しましたが、解決策を見つけることができませんでした。どんな助けでも大歓迎です。バックグラウンドスレッドで実行されるため
query.findObjectsInBackground
あなたの問題は、self.temporaryId = argument ["parentId"] as!文字列が "vEKV1xCO09"から何か別のものに変わることはありませんか? –
thats exactly correct –
私はその理由を理解しましたが、解決策を見つけることができませんでした。どうやら、 "findObjectsInBackground"は非同期クエリであるため、クエリが結論に達する前にメインスレッドが実行されます。私は "findObjects"の代わりに "findObjectsInBackground"を使用してみましたが、私が探していた配列を与えてくれましたが、UIを大幅に遅くして、 "長時間実行されている操作がメインスレッドで実行されています"という警告を出しました。 –