2015-09-08 57 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忘記在上面的評論標記你。 –