【问题标题】:Query from Parse.com if object not exist如果对象不存在,则从 Parse.com 查询
【发布时间】:2015-09-13 20:06:48
【问题描述】:

这是我的解析查询代码:

func queryFromParse(){
        //var query = PFQuery(className: "Posts")
        var query = PFQuery(className: "currentUploads")
        query.orderByDescending("createdAt")
        query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in
            if error == nil
            {
                if let newObjects = objects as? [PFObject] {

                    for oneobject in newObjects {
                        let text = oneobject["imageText"] as! String
                        let username = oneobject["username"] as! String
                        let time = oneobject.createdAt!
                        let userImage = oneobject["imageFile"] as! PFFile
                        let imageURL = userImage.url // <- Bruker nå userImage.URL, henter ikke bildefilen med en gang

                        var OneBigObject = Details(username: username, text: text, CreatedAt: time, image: imageURL!)

                        self.arrayOfDetails.append(OneBigObject)

                        dispatch_async(dispatch_get_main_queue()) { self.collectionView.reloadData() }

                    }
                }
            }
        }
    }

我收到代码错误:

let userImage = oneobject["imageFile"] as! PFFile

致命错误:在展开可选值时意外发现 nil

我知道为什么,因为 parse 中的一行不包含图像:

有什么想法吗?如果那里没有图像,我该怎么做才能不崩溃?

【问题讨论】:

    标签: xcode swift parse-platform


    【解决方案1】:

    给你,试试这样的:

    func queryFromParse(){
            var query = PFQuery(className: "currentUploads")
            query.orderByDescending("createdAt")
            query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in
                if error == nil
                {
                    if let newObjects = objects as? [PFObject] {
    
                        for oneobject in newObjects {
                            let text = oneobject["imageText"] as! String
                            let username = oneobject["username"] as! String
                            let time = oneobject.createdAt!
    
                            if let userImage = oneobject["imageFile"] as? PFFile {
                                let userImage = oneobject["imageFile"] as! PFFile
    
                                let imageURL = userImage.url // <- Bruker nå userImage.URL, henter ikke bildefilen med en gang
    
                                var OneBigObject = Details(username: username, text: text, CreatedAt: time, image: imageURL!)
    
                                self.arrayOfDetails.append(OneBigObject)
    
                                dispatch_async(dispatch_get_main_queue()) { self.collectionView.reloadData() }
                            }
                        }
                    }
                }
            }
        }
    

    【讨论】:

      【解决方案2】:

      可选地打开该对象:

      let imageFile = oneobject["imageFile"] as PFFile
      imageFile.getDataInBackgroundWithBlock {
        (imageData: NSData?, error: NSError?) -> Void in
        if error == nil {
          if let imageData = imageData {
              let image = UIImage(data:imageData)
          }
        }
      }
      

      【讨论】:

      • 但是如果我有一个包含 1000 张图片的列表,而其中只有一张没有图片,会发生什么?那么它根本不会显示任何图像,或者?
      • 嗯,这里有什么问题吗?:s16.postimg.org/ne1ciqm6d/…
      • 我仍然收到那个错误:s27.postimg.org/nqjbtqtcz/…
      • 嗯,你不能从存储在解析数据库中的图像中获取 url .. 这没有意义......
      • 是的,因为在 cellForItemAtIndexPath 中,我使用这个:"cell.imageView.setImageWithUrl(NSURL(string: post.image)!, placeHolderImage: UIImage(named: "Placeholder"))"
      【解决方案3】:

      试试这个

      if let userImage = oneobject["imageFile"] as? PFFile {
                  let imageURL = userImage.url
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        相关资源
        最近更新 更多