2016-12-11 14 views
0

これらの現象が発生する必要がある方法およびプロセスです:マップここ 完了ハンドラ? async_dispatch?

でこのデータ解析

  • から

    1. ダウンロード画像(画像と一致して)ダウンロード関連するデータ
    2. プロット私のコードはビューからロードされました:

      override func viewDidLoad() { 
      
           imageDownload {() ->() in 
            print("5-----inside closure") 
            self.queryParseandSave(callback: self.plotImages) 
           } 
          } 
      

      イメージd ownload機能:その後、self.plotImagesは、地図上の画像をプロットすると、別の機能queryParseandSave(callback: self.plotImages) を呼び出し

      func imageDownload(completed: @escaping FinishedDownload){ 
          print("1-----Started Image download") 
      
          // Query for places 
          let query = PFQuery(className:"ViewFinderObjects") 
          query.whereKey("ImageVerified", equalTo: true) 
          query.whereKey("coordinates", nearGeoPoint:myGeoPoint) 
          query.limit = 10 
          query.findObjectsInBackground { (objects, error) -> Void in 
      
           if (error == nil) { 
            for object in objects! { 
             print("2-----inside object for block") 
              let imageFromParse = object["image"] as! PFFile 
              imageFromParse.getDataInBackground(block: {(imageData, error) -> Void in 
               print("Searching for Image") 
               if error == nil { 
                let obsImage:UIImage = UIImage(data: imageData!)! 
                self.imageToShow = obsImage 
                self.closestImage.append(self.imageToShow!) 
                print("There are \(self.closestImage.count) images in the image array") 
               } 
              }) 
              print("3-----Completed object loop") 
            } 
           } 
      
           print("4-----Calling completed statement") 
           completed() 
          } 
      } 
      

      私は1つの巨大な問題を持っている:イメージは、私はasync_dispatchを研究したが、これは行うには正しいことであれば見当がつかないいる

      のダウンロードが終了する前に

      self.plotImahesは常に呼ばれています。

  • 答えて

    0

    私はquery.findObjectsInBackgroundimageFromParse.getDataInBackgroundメソッドの実装に精通していませんが、それらの名前は両方とも非同期に発生することを意味します。また、前者はオブジェクトデータを取得し、後者は実際の画像データのダウンロードを行います。実際にそうである場合は、の本体の中に補完ハンドラを呼び出すように見えます(実際のイメージのダウンロードと思われるもの)。代わりに非同期メソッドを待っています。

    これを解決する方法についてのアイデアのカップル:

    1. あなたはimageFromParse.getDataInBackgroundブロックにあなたの完了ハンドラを動かすことができますが、あなたは完了ブロックを複数回呼び出して慣れている場合、これが唯一の理にかなって、後各画像のダウンロードが終了する。
    2. 独自のディスパッチキューまたは操作キューを作成し、すべてのタスクが完了するまで待つことができます。、次にが完了ハンドラを呼び出します。
    3. 適切な時刻に完了ハンドラを呼び出すオブザーバまたは通知パターンを設定できます。

    あり、問題に対処するためのさまざまな方法がありますが、覚えておくべき重要なことは、あなたが非同期操作がすべて完了した後に完了ハンドラを呼びたいように聞こえるということです。現在、オブジェクトを取得した後に呼び出すのですが、完了ハンドラが呼び出されると、すべての画像がバックグラウンドでダウンロードされています。

    関連する問題