2016-12-22 12 views
1

イムの空の外にはPFFileが、その後UIImageでそれらを変換して、解析サーバに保存されているいくつかの画像をダウンロードしようとしているUIImageにキャスト。これはforループ内に含まれ、UIImageは配列tempImageArrayに追加されます。この配列は、forループ内に設定されます(サーバー上の9つのイメージすべてを含みます)。ただし、forループの外側でこの配列を使用しようとすると、配列は空です。私は、配列tempImagesArrayを使用する前に配列は、forループ

これはgetdatainbackgroundかつ迅速に行うためのものですが、それを過ぎてスキップされますか?ブロック全体のため

コードは以下です。

let packQuery = PFQuery(className: "Pack") 

packQuery.findObjectsInBackground(block: { (objectsArray, error) in 
    if error != nil { 
     print(error!) 
    } else if let packs = objectsArray { 
     var tempImageArray = [UIImage]() 
     for object in packs { 
      if object.object(forKey: "file") != nil { 
       var imageDataDownLoad = object["file"] as! PFFile 
        imageDataDownLoad.getDataInBackground(block: { (imageData, error) in 
         if error == nil { 
          if let image = UIImage(data: imageData!) { 
           tempImageArray.append(image) 
           print(tempImageArray) 
           // this returns a full array 
          } 
         } 
        }) 
      } 
     } 
     //self.packImage.append(tempImageArray) 
     print(tempImageArray) 
     //this returns [] 
     self.collectionView?.reloadData() 
    } 
    }) 

} 

----------- EDIT -------------------- GitHubの上で利用可能parseUIからPFImageView使用

packQuery.findObjectsInBackground(block: { (objectsArray, error) in 
    if error != nil { 
     print(error!) 
    } else if let packs = objectsArray { 

     for object in packs { 

      let arrayName = object.object(forKey: "packName") as! String 
      let arrayDescription = object.object(forKey: "packDesctription") as! String 
      let arrayTitle = object.object(forKey: "packTitle") as! String 
      let arrayImage = object.object(forKey: "file") as! PFFile 

      self.packArray.append(packStruct(packName: arrayName, packDescription: arrayDescription, packTitle: arrayTitle, packImage: arrayImage)) 
     } 
     self.collectionView?.reloadData() 
    } 
}) 
+0

"これはgetdatainbackgroundと関係があり、swiftは配列tempImagesArrayを使用する前にスキップしていますか?"あなたは正確です。 http://stackoverflow.com/questions/28488867/read-multiple-data-in-block-method-iosに – Palpatim

+0

おかげで提案を参照してください、私はこの問題を回避作業とGitHubの上parseUIプロジェクトからPFImageViewクラスをインポートして使用して終了しましたそれ。これはcocoapodのバージョンがうまくいかず、個別の.hと.mファイルをインポートして動作させるだけで済みましたが、これも回避策でした。 – WanderingScouse

答えて

0
packQuery.findObjectsInBackground(block: { (objectsArray, error) in 
     if error != nil { 
      print(error!) 
     } else if let packs = objectsArray { 

      for object in packs { 

       let arrayName = object.object(forKey: "packName") as! String 
       let arrayDescription = object.object(forKey: "packDesctription") as! String 
       let arrayTitle = object.object(forKey: "packTitle") as! String 
       let arrayImage = object.object(forKey: "file") as! PFFile 

       self.packArray.append(packStruct(packName: arrayName, packDescription: arrayDescription, packTitle: arrayTitle, packImage: arrayImage)) 
      } 
      self.collectionView?.reloadData() 
     } 
    }) 
関連する問題