2015-09-08 62 views
0

在我parse.com “文章” 它看起来像这样: Parse.com PFQuery顺序按时间

我的查询是这样的:

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

        for oneobject in newObjects { 
         var text = oneobject["imageText"] as! String 
         var username = oneobject["username"] as! String 
         var time = oneobject.createdAt 
         var userImageFile = oneobject["imageFile"] as! PFFile 
         userImageFile.getDataInBackgroundWithBlock({ (imageData:NSData?, error:NSError?) -> Void in 
          if error == nil { 
           let newImage = UIImage(data: imageData!) 

           var OneBigObject = Details(username: username, text: text, CreatedAt: time!, image: newImage!) 
           self.arrayOfDetails.append(OneBigObject) 

           self.collectionView.reloadData() 
          } 
         }) 
        } 
       } 
      } 
     } 
    } 

NSDate的扩展:

extension NSDate { 
    var timeAgo: String { 
     let minute = 60 
     let hour = 60 * minute 
     let day = 24 * hour 
     let secondsAgo = Int(NSDate().timeIntervalSinceDate(self)) 
     if secondsAgo < 0   { return "later"       } 
     if secondsAgo == 0   { return "now"        } 
     if secondsAgo == 1   { return "1 second ago"      } 
     if secondsAgo < minute  { return "\(secondsAgo) seconds ago"  } 
     if secondsAgo < (2 * minute) { return "1 minute ago"      } 
     if secondsAgo < hour   { return "\(secondsAgo/minute) minutes ago" } 
     if secondsAgo < 2 * hour  { return "1 hour ago"      } 
     if secondsAgo < day   { return "\(secondsAgo/hour) hours ago" } 
     let formatter = NSDateFormatter() 
     formatter.dateFormat = "M/d/yy" 
     return formatter.stringFromDate(self) 
    } 
} 

我已经尝试使用query.orderByDescending来排列最上面的最新上传,但它不起作用。上传按随机顺序进行,而不是最新的第一次。我究竟做错了什么?我在我的viewDidLoad中运行func QueryImagesFromParse

回答

0

您用于获取userImageFile然后附加OneBigObject的getDataInBackgroundWithBlock方法是异步的,因此您的数组不能保证以正确的顺序排列。

尝试删除该方法,并使用这个代替:

let imageData = userImageFile.getData() 
+0

我想补充说,“getDataInBackgroundWithBlock”方法之后,并使其正常工作。但是,在运行时输出中会收到很多错误消息:请在此处查看:http://s27.postimg.org/evypc1hs3/Screen_Shot_2015_09_09_at_12_25_10.png –

+0

通常不建议使用同步方法,因为它们会阻止用户界面。我假设你正在下载图像数据以显示在UIImageView中。在这种情况下,我会跳过这里获取imageData,而是使用[Kingfisher](https://github.com/onevcat/Kingfisher)(Swift)或[SDWebImage](https://github.com/rs/SDWebImage)(Objective-C),用于在需要显示图像时进行异步图像加载。 –

+0

@ Eri-Sklii忘记在上面的评论标记你。 –