【问题标题】:How to query an PFFile By Creation Date如何按创建日期查询 PFFile
【发布时间】:2015-06-02 17:28:52
【问题描述】:

我正在使用此代码从 Parse 数据中检索图像...

if let userPicture = object.valueForKey("Image") as? PFFile {
      userPicture.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
           if (error == nil) {
                let image = UIImage(data:imageData!)
                self.ImageArray.insert(image!, atIndex: 0)
           }
           else {
                self.alert("Error: \(error!) \(error!.userInfo!)", Message: "Make sure you have a secure internet connection")
           }
           dispatch_async(dispatch_get_main_queue()) {
                println("Finished Pictures")
           }
      })
 }

我正在使用这段代码从 Parse 中检索字符串:

 var stuffarray = [String]()

 var query = PFQuery(className:"ClassName")
 query.findObjectsInBackgroundWithBlock {
            (objects: [AnyObject]?, error: NSError?) -> Void in

      if error == nil {
           // The find succeeded.
           println("Successfully retrieved \(objects!.count) scores.")
           // Do something with the found objects
           if let objects = objects as? [PFObject] {
                for object in objects {
                     stuffarray.append(object.valueForKey("Column")! as! String)
                }
           } else {
                // Log details of the failure
                println("Error: \(error!) \(error!.userInfo!)")
           }

           dispatch_async(dispatch_get_main_queue()) {
                self.alert("\(stuffarray)", Message: "")
           }
      }
 }     

我知道如何通过添加以下代码来查询第二个示例:

query.orderByAscending("createdAt")

我的问题是,我如何像在第二个示例中那样查询第一个示例(图像)?我尝试使用以下代码,但出现错误:

userPicture.orderByAscending("createdAt")

我尝试使用以下代码,文本返回正确,但图像仍以随机顺序返回...

var query = PFQuery(className:"Featured")
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock {
    (objects: [AnyObject]?, error: NSError?) -> Void in

    if error == nil {
        // The find succeeded.
        println("Successfully retrieved \(objects!.count) Items.")
        // Do something with the found objects
        if let objects = objects as? [PFObject] {
            for object in objects {

                self.NameArray.insert(object.valueForKey("Text")! as! String, atIndex: 0)
                self.ItemNameArray.insert(object.valueForKey("ItemName")! as! String, atIndex: 0)


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

                            self.imageArray.insert(image!, atIndex: 0)
                        }
                    }



                    dispatch_async(dispatch_get_main_queue()) {

                        self.loading.hidden = true

                        self.collectionView.reloadData()

                    }

                }




            }


        }
    } else {
        // Log details of the failure
        println("Error: \(error!) \(error!.userInfo!)")

    }

        }

【问题讨论】:

    标签: ios swift parse-platform ios8 uiimage


    【解决方案1】:

    回应,“我把它改成'追加',数组图像仍然是随机顺序。其他2个字符串项目完美运行。为什么只是图像。请迅速给出答案。” :

    您的图像仍然处于随机顺序的原因是因为它们是从服务器异步下载的。 PFFile getDataInBackgroundWithBlock 在后台运行,较小的文件可能比可能较早开始的较大文件更快地完成。

    在您真正准备好在 UICollectionView 或 UITableView 中显示图片之前,您不应该下载图片。当您渲染单元格时,您将调用 PFFile getDataInBackgroundWithBlock 并且只有这样。

    【讨论】:

      【解决方案2】:

      第一个查询出错的原因是您没有获取对象数组。您正在获取无法“排序”的单个 PFFile 的数据内容。如果您希望查询 PFFile 列表并按创建日期对它们进行排序,则需要查询图像附加到的 Class 对象,然后为每个对象获取图像数据(最好是异步的)。示例见下面的代码sn-p:

      PFQuery *query = [PFQuery queryWithClassName:@"Photo"];
      [query orderByDescending:@"createdAt"];
      
      [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
      
          if (!error) {
              for (PFObject *object in objects) {
      
                  [objectIDArray addObject:object.objectId];
                  NSString *postedBy = object[@"postedBy"];
                  [postedByFeedArray addObject:postedBy];
                  NSString *caption = object[@"caption"];
                  [captionFeedArray addObject:caption];
      
                  PFFile *file = object[@"photoFile"];
                  [file getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
                      if (!error) {
                          [photoFeedArray addObject:data];
                      }
                      dispatch_async(dispatch_get_main_queue(), ^{
                          [_activityIndicator stopAnimating];
                          [_tableView reloadData];
                      });
                  }];
      
              }
          } else {
              NSLog(@"ERROR: %@", error);
          }
      }];
      

      如果您需要帮助将其转换为 Swift,请告诉我。

      【讨论】:

      • 我不知道任何objective-c。请帮我把它转换成swift。
      • 您能否说明您在哪里看到您的图片以错误的顺序返回?它是在数组中还是在您的视图中?我可以看到您正在对 PFQuery 执行 orderByDescending,但随后您将结果插入到索引 0 处的数组中。这通过将最后一个对象移动到数组的第一个对象来反转查询的顺序。这会是你的罪魁祸首吗?
      • 使用 .append 代替 .insert atIndex
      • 我把它改成“追加”,数组图像仍然是随机顺序的。其他 2 个字符串项目完美运行。为什么只有图片。请迅速给出答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多