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()
}
})
"これはgetdatainbackgroundと関係があり、swiftは配列tempImagesArrayを使用する前にスキップしていますか?"あなたは正確です。 http://stackoverflow.com/questions/28488867/read-multiple-data-in-block-method-iosに – Palpatim
おかげで提案を参照してください、私はこの問題を回避作業とGitHubの上parseUIプロジェクトからPFImageViewクラスをインポートして使用して終了しましたそれ。これはcocoapodのバージョンがうまくいかず、個別の.hと.mファイルをインポートして動作させるだけで済みましたが、これも回避策でした。 – WanderingScouse