2017-03-06 15 views
0

私の問題は次のとおりです。すべての引数には実際に他の引数の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

+0

あなたの問題は、self.temporaryId = argument ["parentId"] as!文字列が "vEKV1xCO09"から何か別のものに変わることはありませんか? –

+0

thats exactly correct –

+1

私はその理由を理解しましたが、解決策を見つけることができませんでした。どうやら、 "findObjectsInBackground"は非同期クエリであるため、クエリが結論に達する前にメインスレッドが実行されます。私は "findObjects"の代わりに "findObjectsInBackground"を使用してみましたが、私が探していた配列を与えてくれましたが、UIを大幅に遅くして、 "長時間実行されている操作がメインスレッドで実行されています"という警告を出しました。 –

答えて

0

、すべてforループに新たに取得@"parentId"temporaryIdを更新する方法はありません。

は、だから私はあなたが再帰関数を作成することができると思い、何かのように:

func getParentId() { 
    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 
       while (all.count <= 3) { 
        getParentId() 
       } 
      } 
     } 
    } 
} 

私はObjective-Cの開発者だと私はスウィフトに十分な練習を行っていないので、私はあればごめんなさいIいくつかの構文エラーがありました。

+0

これは私の問題を解決しました。助けてくれてありがとう。 –

関連する問題