将图像从解析加载到集合视图 Swift
Posted
技术标签:
【中文标题】将图像从解析加载到集合视图 Swift【英文标题】:Load Image from parse to Collection View Swift 【发布时间】:2017-04-23 11:22:32 【问题描述】:我想获得一些如何解决问题的建议。我想将存储在 Parse Server 上的图像加载到我的集合视图中,我正在使用以下代码:
import UIKit
import Parse
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate
//var my_array:[String] = []
//var my_array: [String] = [String]()
var imageResources : Array<UIImage> = []
//var query = PFQuery(className: "User")
var query2 = PFQuery(className: "User")
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//my_array = ["montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg","montagne.jpeg"]
query2.findObjectsInBackground (objects: [PFObject]?, error: Error?) -> Void in
if error == nil
print("OK")
for object in objects!
print("IN FOR")
let thumbNail = object["image"] as! PFFile
thumbNail.getDataInBackground(
(imageData: Data?, error: Error?) -> Void in
if (error == nil)
print("IN SECOND IF")
let image = UIImage(data:imageData!)
self.imageResources.append(image!)
//let size = self.imageResources.count
//print(size)
)
//query.findObjectsInBackground (objects: [PFObject]?, error: Error?) -> Void in
// if error == nil
// for object in objects!
// self.my_array.append(object.object(forKey: "image") as! String)
//
//
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return imageResources.count
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
var cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
cell.ImageView?.image = imageResources[indexPath.row]
return cell
我在运行我的应用程序时没有任何错误,但是我没有在集合视图中获取我的应用程序上的图像。图片在我的 Parse Server 中:Parser Server Interface
我刚刚发现在这段代码中,打印 print("IN FOR")
没有打印,所以我认为这里有问题,这就是为什么我的应用程序没有加载任何内容:
query2.findObjectsInBackground (objects: [PFObject]?, error: Error?) -> Void in
if error == nil
print("OK")
for object in objects!
print("IN FOR")
let thumbNail = object["image"] as! PFFile
thumbNail.getDataInBackground(
(imageData: Data?, error: Error?) -> Void in
if (error == nil)
print("IN SECOND IF")
let image = UIImage(data:imageData!)
self.imageResources.append(image!)
//let size = self.imageResources.count
//print(size)
)
但是当我在我的程序中使用修复图像并将其存储在一个数组中(注释中的代码)时,我可以在我的集合视图中看到这些图像...... 有人可以帮我解决这个问题吗?谢谢一百万。
乔迪。
【问题讨论】:
尝试在数据到来后重新加载集合视图,尝试为您的集合视图获取出口并在 for 循环之后执行 collectionview.realodData()。 是的,这发生在我身上,尝试清理项目,或者写@IBOutlet var outletOfCollectionView: UICollectionView!然后用集合视图控件附加它 嘿,谢谢你的回答,我得到了同样的东西,我认为这就像循环有问题,因为它没有进入 for 循环......当我想打印时( print("IN FOR")) 它没有出现在控制台中.. print("OK") 出现? 是的 print("OK") 出现,但其余部分没有出现,就像它没有进入一样:( 【参考方案1】:User 类是 Parse 的内置类,内部命名为 _User
(带下划线),因此您的查询应如下所示:
var query2 = PFQuery(className: "_User")
或者,更紧凑:
var query2 = PFUser.query()
编辑
获取用户及其图像后,您必须重新加载集合视图以使其了解新数据;并且由于发生这种情况时您在后台队列中,因此您必须分派到主队列才能这样做:
for object in objects!
// ...
DispatchQueue.main.async
self.collectionView.reloadData()
然而,我在您的代码中没有看到UICollectionView
;您只实现委托和数据源协议。你最好只继承UICollectionViewController
而不是UIViewController
。
【讨论】:
谢谢,我的 for 循环现在可以工作,但它不显示图像,我必须在用户类名中指定列的名称吗?因为我认为我在这里这样做:让 thumbNail = object["image"] as! PF文件 还可以考虑使用 ParseUI 来使用 PFImageViews 内置 pffile 图像下载 + 占位符图像支持,这可能会使事情变得更容易。以上是关于将图像从解析加载到集合视图 Swift的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 3 将图像从 Rest Api 加载到视图中加载方法
如何从 HTTP 请求将图像加载到 UIButton Swift
如何从HTTP请求将图像加载到UIButton Swift中