Ios 检索多个解析图像(Swift)
下面是我通常如何从Parse.com检索图像的示例。我现在遇到了这样的情况,我想从Parse中检索20多个图像,但我正在寻找一种更有效的方法。请有人解释一下如何在代码中实现这一点,以及我应该如何在Parse中存储20+pf文件Ios 检索多个解析图像(Swift),ios,database,swift,parse-platform,Ios,Database,Swift,Parse Platform,下面是我通常如何从Parse.com检索图像的示例。我现在遇到了这样的情况,我想从Parse中检索20多个图像,但我正在寻找一种更有效的方法。请有人解释一下如何在代码中实现这一点,以及我应该如何在Parse中存储20+pf文件 func loadData(){ let findDataParse = PFQuery(className: "JobListing") findDataParse.findObjectsInBackgroundWithBlock{ (objects: [PFO
func loadData(){
let findDataParse = PFQuery(className: "JobListing")
findDataParse.findObjectsInBackgroundWithBlock{
(objects: [PFObject]?, error: NSError?) -> Void in
if (error == nil) {
for object in objects! {
let userImageFile = object["ImageOne"] as! PFFile
let userImageFile1 = object["ImageTwo"] as! PFFile
let userImageFile2 = object["ImageThree"] as! PFFile
userImageFile.getDataInBackgroundWithBlock {
(imageData: NSData?, error: NSError?) -> Void in
let listingImage1 = UIImage(data:imageData!)
userImageFile1.getDataInBackgroundWithBlock {
(imageData1: NSData?, error1: NSError?) -> Void in
let listingImage2 = UIImage(data:imageData1!)
userImageFile2.getDataInBackgroundWithBlock {
(imageData2: NSData?, error1: NSError?) -> Void in
let listingImage3 = UIImage(data:imageData2!)
self.flyerImageLarge1.image = listingImage1
self.flyerImageLarge2.image = listingImage2
self.flyerImageLarge3.image = listingImage3
}}}}}}}
您可以使用ParseUI获得更干净、更高效的代码。 为此,添加ParseUI框架。 然后,单击图像并将“类”更改为PFImageView。 完成此操作后,您可以轻松设置PFImageView的图像:
if let myServerImage = object.valueForKey("imageFromUser") as? PFFile {
self.myImage.file = myServerImage
self.myImage.loadInBackground()
}
其中,myServerImage是从解析服务器检索的图像,myImage是故事板中的图像
在您的情况下,它将是这样的:
func loadData(){
let findDataParse = PFQuery(className: "JobListing")
findDataParse.findObjectsInBackgroundWithBlock{
(objects: [PFObject]?, error: NSError?) -> Void in
if (error == nil) {
if let myServerImage = object.valueForKey("ImageOne") as? PFFile {
self.flyerImageLarge1.file = myServerImage
self.flyerImageLarge1.loadInBackground()
}
if let myServerImage = object.valueForKey("ImageTwo") as? PFFile {
self.flyerImageLarge2.file = myServerImage
self.flyerImageLarge2.loadInBackground()
}
if let myServerImage = object.valueForKey("ImageThree") as? PFFile {
self.flyerImageLarge3.file = myServerImage
self.flyerImageLarge3.loadInBackground()
}
}
}
我建议添加if-let语句,以便在图像不存在时不会出现错误。您可以使用ParseUI来获得更干净、更高效的代码。 为此,添加ParseUI框架。 然后,单击图像并将“类”更改为PFImageView。 完成此操作后,您可以轻松设置PFImageView的图像:
if let myServerImage = object.valueForKey("imageFromUser") as? PFFile {
self.myImage.file = myServerImage
self.myImage.loadInBackground()
}
其中,myServerImage是从解析服务器检索的图像,myImage是故事板中的图像
在您的情况下,它将是这样的:
func loadData(){
let findDataParse = PFQuery(className: "JobListing")
findDataParse.findObjectsInBackgroundWithBlock{
(objects: [PFObject]?, error: NSError?) -> Void in
if (error == nil) {
if let myServerImage = object.valueForKey("ImageOne") as? PFFile {
self.flyerImageLarge1.file = myServerImage
self.flyerImageLarge1.loadInBackground()
}
if let myServerImage = object.valueForKey("ImageTwo") as? PFFile {
self.flyerImageLarge2.file = myServerImage
self.flyerImageLarge2.loadInBackground()
}
if let myServerImage = object.valueForKey("ImageThree") as? PFFile {
self.flyerImageLarge3.file = myServerImage
self.flyerImageLarge3.loadInBackground()
}
}
}
我建议添加if-let语句,以便在图像不存在时不会出现错误。如果我所说的是显而易见的或已经考虑过的,请原谅我。我不完全熟悉你在做什么,但它看起来很适用
假设您尚未使用它,则需要使用一个。基本上,一个调用自身直到结束条件的函数。
我不熟悉您的代码,因此我将用一个简单的JavaScript示例演示:
/* A "public" function that your program will call */
function getStuff(total)
{
//quick positive check
if (total > 0)
{
//start and pass in an empty array
return _getStuffRecursion(total, []);
}
else
{
//total is not positive, return empty array
return [];
}
}
/* A "private" function that will do the recursion */
function _getStuffRecursion(total, resultsArray)
{
//do work this is where you would call your function that does the work.
var someResource = Math.random();
//add work to the array collected so far
resultsArray.push(someResource);
//change count
var newTotal = total - 1;
//check condition
if (newTotal > 0)
{
//recursive condition, go to the next level down and pass in what is collected so far
return _getStuffRecursion(newTotal, resultsArray)
}
else
{
//end condition met, just return the array with everything collected from the upper levels
return resultsArray;
}
}
/* Start */
//get started by calling the "public" function
var results = getStuff(20);
//print it to console
console.log(results);
如果这个解决方案有效,我相信您可以调整它以进行解析。如果我所说的是显而易见的或已经考虑过的,请原谅我。我不完全熟悉你在做什么,但它看起来很适用
假设您尚未使用它,则需要使用一个。基本上,一个调用自身直到结束条件的函数。
我不熟悉您的代码,因此我将用一个简单的JavaScript示例演示:
/* A "public" function that your program will call */
function getStuff(total)
{
//quick positive check
if (total > 0)
{
//start and pass in an empty array
return _getStuffRecursion(total, []);
}
else
{
//total is not positive, return empty array
return [];
}
}
/* A "private" function that will do the recursion */
function _getStuffRecursion(total, resultsArray)
{
//do work this is where you would call your function that does the work.
var someResource = Math.random();
//add work to the array collected so far
resultsArray.push(someResource);
//change count
var newTotal = total - 1;
//check condition
if (newTotal > 0)
{
//recursive condition, go to the next level down and pass in what is collected so far
return _getStuffRecursion(newTotal, resultsArray)
}
else
{
//end condition met, just return the array with everything collected from the upper levels
return resultsArray;
}
}
/* Start */
//get started by calling the "public" function
var results = getStuff(20);
//print it to console
console.log(results);
如果此解决方案有效,我相信您可以将其应用于解析。您是否建议我对解析中的20多个图像执行此操作?您是否建议我对解析中的20多个图像执行此操作?抱歉,我不知道这是如何应用的。请原谅我不理解。您介意进一步解释吗?当后续操作依赖于之前的操作时,递归函数很有用。你的代码需要吗?如果不是,也许一个简单的“for循环”就可以了。对不起,我不明白这是怎么应用的。请原谅我不理解。您介意进一步解释吗?当后续操作依赖于之前的操作时,递归函数很有用。你的代码需要吗?如果不是,也许一个简单的“for循环”就可以了。