我想在collectionView中使用JSON解析来加载图像。我获得了一系列图片网址,但图片未显示在UIImageView
上。我在获取JSON数组并在UICollectionView
' s UIImageView
中显示之后使用了此代码。
if let url = NSURL(string: self.Products[indexPath.row].image) {
if let data = NSData(contentsOfURL: url){
cell.product_image.contentMode = UIViewContentMode.ScaleAspectFit
cell.product_image.image = UIImage(data: data)
}
}
但我无法加载图片,但会显示文字。我在cellForItemAtIndexPath
方法中使用过这段代码。有谁能告诉我我做错了什么?
func jsonParsingFromURL(){
// 1
let reposURL = NSURL(string: "http://api.room2shop.com/api/product/GetProducts?categoryId=24&filter=2&pageNumber=1")
// 2
if let JSONData = NSData(contentsOfURL: reposURL!) {
// 3
do
{
if let json = try NSJSONSerialization.JSONObjectWithData(JSONData, options: .AllowFragments) as? NSDictionary {
// 4
if let reposArray = json["ProductList"] as? [NSDictionary] {
// 5
for item in reposArray {
Products.append(ProductList(json: item))
}
}
}
}
catch {
print("Error with Json: \(error)")
}
}
}
这是我的JSON解析代码
答案 0 :(得分:1)
要反映变化,您需要使用
self.collectionView?.reloadData()
修改
1-请用此替换此块,并告诉我你是否正常获取网址,对我来说,我通常会得到网址
for item in reposArray
{
//ProductList(json: item)
//Products.append(ProductList(json: item))
//print(item)
print("__________")
print(item["Image"]!)
}
2-我正在
传输安全已阻止明文HTTP
答案 1 :(得分:1)
使用此
// taking the URL , then request image data, then assigne UIImage(data: responseData)
let imgURL: NSURL = NSURL(string: "www.example.com/image.jpg")!
let request: NSURLRequest = NSURLRequest(URL: imgURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) {
(data,response,error) -> Void in
if ( error == nil && data != nil ) {
func display_image() {
// imageView.post.image = your UIImage
self.imageViewPost.image = UIImage(data: data!)
}
dispatch_async(dispatch_get_main_queue(), display_image)
}
}
task.resume()
// end of loading img
答案 2 :(得分:0)
图片是未保存在image.xassets
内部的URL,因此您需要使用下面给出的扩展名来解析URL。
//添加扩展名
extension UIImageView {
func loadImage(urlString: String) {
let url = URL(string: urlString)!
URLSession.shared.dataTask(with: url, completionHandler: { (data, respones, error) in
if error != nil {
print(error ?? "")
return
}
DispatchQueue.main.async {
self.image = UIImage(data: data!)
}
}).resume()
}
}
//在您的vc中调用此语句(在其中插入)
yourImageView.loadImage(urlString:yourUrl)