我正在从 json Web 服务获取数据,但无法在我的用户界面上显示它

2023-12-26

在这里,我遇到问题,我能够从 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
            }
        }
    }

你用什么来显示图像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
            }
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我正在从 json Web 服务获取数据,但无法在我的用户界面上显示它 的相关文章

  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • Apple Mach-O 链接器错误(静态,不是 ld)

    我最近遇到了 Apple Mach O 链接器错误 大多数指南建议将 构建设置 中的位码更改为 否 但它仅适用于 ld 错误 这与我的不同 我会提供截图 请帮忙修复bug pod HandySwift 导致了错误的出现 这是它的 Githu
  • 如何动态获取 UITableViewCell 的高度

    我创建了自定义的tableViewCell 我在UITableViewCell中添加了UIView SubView 所以我在 UIView 中的所有动态文本和图像内容都会根据文本和图像大小而变化 但现在 HeightforRowAtInde
  • SwiftUI 意外地自动弹出 NavigationLink

    我有一个简单的用例 其中一个屏幕使用 NavigationLink 推送另一个屏幕 iOS 14 5 有一个奇怪的行为 即推送的屏幕在被推送后立即弹出 Code NavigationLink destination EmptyView Em
  • BigQuery 未显示链接的 Firebase Analytics 事件日志的任何数据集

    我将我的帐户链接到 Big Query 但 Firebase Analytics 事件不会自动加载到 BigQuery 中 显示 未找到数据集 警告 我的工作进度附在下面 请查收 I have getting firebase Analyt
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • jQuery:离线后 POST 出错(iOS 和 Chrome)

    我构建了一个具有离线功能的 HTML5 Web 应用程序 使用 AppCache 程序流程为 Online 在网络上时 应用程序预加载一些基本信息 工作 Offline 用户拿着装有应用程序的平板电脑offline 然后在应用程序上执行他们
  • UIViewController 不旋转到横向

    在许多情况下需要旋转控制器但不起作用 现在我遇到了相反的问题 它正在旋转 我想禁用它 在那个 ViewController 中我有这个 BOOL shouldAutorotateToInterfaceOrientation UIInterf
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • AVAudioPlayer 无法从网站播放 m4a 或 mp3 文件类型

    我试图在我的应用程序中找到一个仅纯 m4a 声音的 URL 我有音频的 URL 理论上可以下载它 然后 使用下载的文件URL到声音 我尝试使用AVAudioPlayer播放它 但它不播放任何声音 这是我的代码 在 URL 检索函数中 我调用
  • 根据内容自动更改单元格高度 - Swift

    在 Swift 中使用 UITableView 有人可以帮我根据标签 图片和描述自动更改单元格的高度吗 所有信息都正确传递 我只需要帮助格式化它 我尝试使用调整它cell frame size height 但这没有效果 我可以更改故事板中
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 如何使用 IOS 12 在 UITableViewCell 中正确添加 UICollectionView

    由于某些原因 在使用 Xcode 10 beta 时 我无法正确显示 tableview 单元格内集合中的某些项目 在过去的四天里我尝试了我所知道的一切 我做了一个小项目样本来看看我的问题是什么 如果有人想在本地运行完整代码 请参见此处 h
  • 防止 iOS 键盘在 cordova 3.5 中滚动页面

    我正在使用 Cordova 3 5 和 jQuery mobile 构建 iOS 应用程序 我在大部分应用程序中禁用了滚动功能 但是 当我选择输入字段时 iOS 键盘会打开并向上滚动页面 我不想要这个功能 由于输入足够高 键盘不会覆盖它 我
  • jQuery AJAX 请求在 IE8 中失败,并显示消息“错误:调用 open 方法之前无法调用此方法。”

    我正在使用 jQuery 1 4 2 并尝试执行一个简单的 AJAX 请求 目标 URL 返回一个 JSON 字符串 我使用 jslint 对其进行了验证 该请求在 Firefox 和 Chrome 中有效 但不想在 IE8 中工作 我无法
  • 如何格式化 Json 输出

    请帮助我如何获取 JSON 输出 如下所示 costMethod Average fundingDate 2008 10 02 fundingAmount 2510959 95 代替 type sma costMethod Average
  • iOS:Facebook 登录访问令牌错误:由于模拟器错误,回退到从 NSUserDefaults 加载访问令牌

    根据说明进行配置后 我不断收到此错误 并且无法在我的应用程序上成功使用 Facebook 登录 我在 XCode 8 1 上运行它并使用 iOS 10 1 模拟器 我按照 Facebook iOS SDK 指南中的步骤操作 并将 Faceb
  • 诊断和仪器均缺少“僵尸”选项

    运行 Xcode 4 0 2 Zombie 选项丢失 其他 SO 帖子建议找到它的两个地方 Product gt Run looks like this Product gt Profile looks like this 奇怪的是 我之前
  • 所有 RestKit 项目在归档时都无法构建

    这个问题涉及RESTKIT 0 9 x 如果您是 Restkit 新手 请考虑使用较新的版本0 10 x https github com RestKit RestKit tree v0 10 1 branch 我最近继承了一个项目 使用r

随机推荐