我从JSON Web服务获取数据,但无法显示在我的用户界面上
在这里我有问题,我能够从JSON Web服务获取数据,但无法显示在我的用户界面程序中,我提到我得到的错误,什么也提到有什么可以帮助我吗?
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 } } }
你用什么来显示图像在func swiped(gesture: UIGestureRecognizer)
方法执行如下
imageView.image = UIImage(named: imageArray[pageIndex])
但是您的图像是从服务器编写的,所以您只需要显示您的产品的所有图像就像您在OperationQueue.main.addOperation
中首先显示的那样,而不是使用UIImage(named: imageArray[pageIndex])
显示图像它的数据并显示它imageview和您修改后的func swiped(gesture: UIGestureRecognizer)
可能看起来像下面
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 } } }