【问题标题】:Unable to load data from Parse Server with error =( Error?) nil none无法从 Parse Server 加载数据,错误 =( Error?) nil none
【发布时间】:2018-03-15 11:53:33
【问题描述】:

由于出现错误 - error =( Error?) nil none,我无法从服务器加载数据。在出现错误之前,它会看到 PFObject 的 4 个值。然后下载和节拍。并指向一条线 - let detailPrognozS = object["detailPrognozS"] as! String。不知道怎么回事?

func detailObject() {

    let query = PFQuery(className: "soccer")
    query.findObjectsInBackground { (objects:[PFObject]?, error:Error?) in
        if error == nil {
            for object in objects! {
                let detailPrognozS  = object["detailPrognozS"] as! String
                let detailTitleS = object["detailTitleS"] as! String
                let detailTextS = object["detailTextS"] as! String
                let imageDetail = object["detailImageS"] as! PFFile

                DispatchQueue.main.async { [unowned self] in
                    self.prognozDetail.text = detailPrognozS
                    self.textView.text = detailTextS
                    self.titleDetail.text = detailTitleS
                }

                imageDetail.getDataInBackground(block: { (data:Data?, error:Error?) in
                    if error == nil {
                        DispatchQueue.main.async { [unowned self] in
                            let imageData = data
                            self.imageDetail.image = UIImage(data: imageData!)
                        }
                    }
                })

            }
        }
    }

}

【问题讨论】:

  • 您正在强制解开 object["detailPrognozS"]。因此,如果来自服务器的有效负载不包含detailPrognozS,那么您的应用就会崩溃。

标签: swift parse-platform pfquery pfobject parse-ios-sdk


【解决方案1】:

请您再具体一点。我想正在发生的事情是,当你要在后台获取数据时,它会触发下一个 for 循环运行,而不是让它有机会返回数据。

不过,您确实应该清理这段代码。不应该在网络调用中设置 uilabels 文本,它所能做的就是返回一个带有对象和错误状态或 nil 的完成处理程序。请查看一些 MVC 模式,我认为这会有所帮助。短期修复可能是添加一个“let dispatchGroup = DispatchGroup()”并在它进入和离开时设置。希望这可以帮助。

https://developer.apple.com/documentation/dispatch/dispatchgroup https://www.raywenderlich.com/160651/design-patterns-ios-using-swift-part-12

【讨论】:

  • 谢谢。但我有与循环findObjectsInBackground有关的错误
  • 是的,但是您还应该有一条错误消息,用于将您获得的数据映射到对象。输入错误的键会怎样?
  • 感谢您的帮助。我发现自己错了。请评价我的回复或重写。我会更正。
【解决方案2】:
let query = PFQuery(className: "soccer")
            query.findObjectsInBackground { (objects: [PFObject]?, error) -> Void in
                if error == nil {
                    for object in objects! {



                        self.prognozDetail.text = object["detailPrognozS"] as? String
                        self.textView.text = object["detailTextS"] as? String
                        self.titleDetail.text = object["detailTitleS"] as? String
                        let imageDetail = object["detailImageS"] as? PFFile


                        imageDetail?.getDataInBackground(block: { (data:Data?, error:Error?) in
                            if error == nil {

                                    if  let imageData = data {

                                        self.imageDetail.image = UIImage(data: imageData)

                                        }

                            }

                        })
                    }
                }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2018-08-27
    • 2015-11-19
    相关资源
    最近更新 更多