2015-11-10 1 views
2

У меня есть запрос, который извлекает текущего пользователя и его список друзей на моей странице канала, я попытался заказать сообщение по дате создания или самой последней дате. Вот результат, который я получил от моего кода, когда я напечатать «createAt»:Запрос запроса на парсингByDescending не работает

enter image description here

Результат очень случайны.

И вот мой код

for friend in friendsArray { 
      let postQuery = PFQuery(className:"Post") 
      postQuery.whereKey("createdBy", equalTo: friend) 
      postQuery.includeKey("Song") 
      postQuery.includeKey("createdBy") 
      postQuery.orderByDescending("createdAt") 
      postQuery.findObjectsInBackgroundWithBlock { 
       (objects: [AnyObject]?, error: NSError?) -> Void in 

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

          let songObject : PFObject = object["Song"] as! PFObject 
          let songTitle: AnyObject? = songObject.objectForKey("songTitle") 
          let songArtist: AnyObject? = songObject.objectForKey("songArtist") 
          let albumCover: AnyObject? = songObject.objectForKey("albumCover") 
          let previewUrl: AnyObject? = songObject.objectForKey("previewUrl") 
          let trackviewUrl : AnyObject? = songObject.objectForKey("trackViewUrl") 

          let timeAgo = object.createdAt 
          let postCaption: AnyObject? = object.objectForKey("postCaption") 
          let postId: AnyObject? = object.objectId 
          let recentTotalComment: AnyObject? = object.objectForKey("recentTotalComment") 
          let recentTotalLike: AnyObject? = object.objectForKey("recentTotalLike") 

          let posterObject = object["createdBy"] as! PFObject 
          let posterUser = object["createdBy"] as! PFUser 
          let posterImage: AnyObject? = posterObject.objectForKey("profilePicture") 
          let posterUsername: AnyObject? = posterObject.objectForKey("username") 


          self.postDictionary = ["title" : songTitle!, "artist" : songArtist!, "previewUrl" : previewUrl! , "caption" : postCaption!, "timeAgo" : self.timeAgoSinceDate(timeAgo!, numericDates: true), "cover" : albumCover!, "postId" : postId!, "posterImage" : posterImage!, "posterUsername" : posterUsername!, "likeCount" : recentTotalLike!, "commentCount" : recentTotalComment! , "otherUser" : posterUser , "trackViewUrl" : trackviewUrl!] 

          self.postArray.addObject(self.postDictionary!) 

          self.likeArray.addObject(recentTotalLike as! String) 
          self.commentArray.addObject(recentTotalComment as! String) 

          print("created at : \(object.createdAt)") 

          self.tbl.reloadData()         
          self.tbl.setContentOffset(CGPointMake(0, self.verticalContentOffset), animated: true) 
          self.refreshControl.endRefreshing() 
         } 
        } 
       } else { 
        // Log details of the failure 
        print("Error: \(error!) \(error!.userInfo)") 
       } 
      } 


     } 

Как я могу заказать мой пост запрос, он создан на сегодняшний день?

+0

Есть ли разница, если вы используете 'печать ("created at: \ (songObject.createdAt)") 'вместо' print ("created at: \ (object.createdAt)") '? – Russell

+0

@ Russell это другое, но все же случайное –

ответ

0

postQuery завернутый в цикл, чтобы перебирать всех друзей в friendsArray. Поскольку запрос выполняется в фоновом режиме, цикл будет продолжаться во время выполнения запроса и до сих пор ожидает ответа.

Это приведет к одновременному выполнению нескольких запросов и ответов, и я предполагаю, что вы просматриваете заявления печати из нескольких запросов, что приводит к нарушению порядка.

Чтобы убедиться, что запрос упорядочен правильно, выполните только один из запросов и распечатайте результаты.

Наконец, вы должны избегать выполнения цикла запросов любой ценой, потому что он не будет масштабируемым вообще.

Например, вместо оберточной запроса в цикле и используя

postQuery.whereKey("createdBy", equalTo: friend) 

вы можете реорганизовать код для использования whereKey:containedIn:

postQuery.whereKey("createdBy", containedIn: friendsArray) 
+0

Я меняю свой код, как вы предлагали, и он отлично работает, спасибо –

Смежные вопросы