I am getting data from json web services but unabl

2020-05-01 09:51发布

here I am having problem that I am able to get the data from json web services but unable to display on my ui in the program I mentioned where I am getting error and what it is also mentioned there can anyone help me ?

class DetailsViewController: UIPageViewController{

    @IBOutlet var navigationBar: UINavigationBar!
    @IBOutlet var imageView: UIImageView!
    @IBOutlet var pageControl: UIPageControl!
    @IBOutlet var nameLabel: UILabel!
    @IBOutlet var priceLabel: UILabel!
    @IBOutlet var textview: UITextView!

    var productName :String?
    var productprice :String?
    var productdescription :String?
    var thumbnailimageArray = [String]()
    var imageArray = [String]()
    var pageIndex: Int = 0


let urlString = "http://www.json-generator.com/api/json/get/cjpberBhKa?indent=2"

    override func viewDidLoad() {
        super.viewDidLoad()
        self.downloadJsonWithURL()
        let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
        swipeLeft.direction = .left
        self.imageView.addGestureRecognizer(swipeLeft) //unexpectely found nil while unwrapping an optional value
        let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
        swipeRight.direction = .right
        self.imageView.addGestureRecognizer(swipeRight)
        imageView.isUserInteractionEnabled = true
        pageControl.numberOfPages = imageArray.count
        pageControl.currentPage = pageIndex
        // Do any additional setup after loading the view.
    }
    func downloadJsonWithURL() {
        let url = NSURL(string: urlString)
        URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response, error) -> Void in
            if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {
                print(jsonObj!.value(forKey: "Detail")!)
                if let detailsArray = jsonObj!.value(forKey: "Detail") as? NSArray {
                    if let detailDict = detailsArray[0] as? NSDictionary {
                        if let name = detailDict.value(forKey: "productName") {
                            self.productName = name as? String
                        }
                        if let image1 = detailDict.value(forKey: "image1"){
                            self.imageArray.append(image1 as! String)
                        }
                        if let image2 = detailDict.value(forKey: "image2"){
                            self.imageArray.append(image2 as! String)
                        }
                        if let image3 = detailDict.value(forKey: "image3"){
                            self.imageArray.append(image3 as! String)
                        }
                        if let image4 = detailDict.value(forKey: "image4"){
                            self.imageArray.append(image4 as! String)
                        }
                        if let image5 = detailDict.value(forKey: "image5"){
                            self.imageArray.append(image5 as! String)
                        }
                        if let image6 = detailDict.value(forKey: "image6"){
                            self.imageArray.append(image6 as! String)
                        }
                        if let image7 = detailDict.value(forKey: "image7"){
                            self.imageArray.append(image7 as! String)
                        }
                        if let image8 = detailDict.value(forKey: "image8"){
                            self.imageArray.append(image8 as! String)
                        }
                        if let image9 = detailDict.value(forKey: "image9"){
                            self.imageArray.append(image9 as! String)
                        }
                        if let image10 = detailDict.value(forKey: "image10"){
                            self.imageArray.append(image10 as! String)
                        }
                        if let price = detailDict.value(forKey: "productPrice") {
                            self.productprice = price as? String
                        }
                        if let description = detailDict.value(forKey: "productDes") {
                            self.productdescription = description as? String
                        }
                    }
                }
                OperationQueue.main.addOperation({
                    self.navigationBar.topItem?.title = self.productName
                    self.textview.text = self.productdescription
                    self.priceLabel.text = self.productprice
                    print(self.imageArray)
                    let imgURL = NSURL(string:self.imageArray[0])
                    let data = NSData(contentsOf: (imgURL as URL?)!)
                    self.imageView.image = UIImage(data: data! as Data)
                })
            }
        }).resume()
    }
    func swiped(gesture: UIGestureRecognizer) {
        if let swipeGesture = gesture as? UISwipeGestureRecognizer {
            switch swipeGesture.direction {
            case UISwipeGestureRecognizerDirection.right :
                if pageIndex == 0 {

                }else{
                    pageIndex -= 1
                }
                imageView.image = UIImage(named: imageArray[pageIndex])
            case UISwipeGestureRecognizerDirection.left:
                if pageIndex >= imageArray.count-1{

                }else{
                    pageIndex += 1
                }
                imageView.image = UIImage(named: imageArray[pageIndex])
            default:
                break
            }
        }
    }

标签: ios json swift3
1条回答
三岁会撩人
2楼-- · 2020-05-01 10:41

what you are using to display image in func swiped(gesture: UIGestureRecognizer) method execution is as below

imageView.image = UIImage(named: imageArray[pageIndex])

but your image is comping from the server so you just need to display all images of your product is as you displayed first in OperationQueue.main.addOperation so in place of displaying image using UIImage(named: imageArray[pageIndex]) you need to convert it to data and display it to imageview and your modified func swiped(gesture: UIGestureRecognizer) may look like as below

func swiped(gesture: UIGestureRecognizer) {
        if let swipeGesture = gesture as? UISwipeGestureRecognizer {
            switch swipeGesture.direction {
            case UISwipeGestureRecognizerDirection.right :
                if pageIndex == 0 {

                }else{
                    pageIndex -= 1
                }
                let imgURL = NSURL(string:self.imageArray[pageIndex])
                let data = NSData(contentsOf: (imgURL as URL?)!)
                self.imageView.image = UIImage(data: data! as Data)

            case UISwipeGestureRecognizerDirection.left:
                if pageIndex >= imageArray.count-1{

                }else{
                    pageIndex += 1
                }
                let imgURL = NSURL(string:self.imageArray[pageIndex])
                let data = NSData(contentsOf: (imgURL as URL?)!)
                self.imageView.image = UIImage(data: data! as Data)
            default:
                break
            }
        }
    }
查看更多
登录 后发表回答