从JSON图像url swift填充collectionView

时间:2016-03-30 11:54:19

标签: ios json swift image uicollectionview

我想在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解析代码

3 个答案:

答案 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

解决方案在这里。 Transport security has blocked a cleartext 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)