我正在从 json Web 服务获取数据,但无法在我的 ui 上显示它
Posted
技术标签:
【中文标题】我正在从 json Web 服务获取数据,但无法在我的 ui 上显示它【英文标题】:I am getting data from json web services but unable to display it on my ui 【发布时间】:2017-05-20 05:42:41 【问题描述】:在这里我遇到了问题,我能够从 json Web 服务获取数据,但无法在我提到的程序中的 ui 上显示我收到错误的地方以及那里也提到的内容,有人可以帮助我吗?
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
【问题讨论】:
错误是什么?? 在self.imageView.addGestureRecognizer(swipeLeft)
上设置断点,然后检查 imageView 是否为 nil。如果是这种情况,请正确连接插座。
@bilal self.imageView.addGestureRecognizer(swipeLeft) 在这里我收到错误,即在展开可选值时意外发现 nil
滑动时发生崩溃??
没有第二个视图控制器没有加载@bilal
【参考方案1】:
您在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
【讨论】:
以上是关于我正在从 json Web 服务获取数据,但无法在我的 ui 上显示它的主要内容,如果未能解决你的问题,请参考以下文章