     func removeSendStates() {
 
         var messageStates = statesOfConversation(self.conversation, MessageSendState.Successed.rawValue, nil, inRealm: self.realm)
-        
+
         if let lastMessage = messageStates.last {
             
             println("Message \(lastMessage.refMessageID) count before send \(self.messages.count) \(self.displayedMessagesRange.length)")
             
             var sendStates = statesOfConversation(self.conversation, MessageSendState.Successed.rawValue, lastMessage.refMessageID, inRealm: self.realm)
             
+            var newMessageState = messageStates.count - sendStates.count
+            
+            if sendStates.count < 1 {
+                return
+            }
+            
             var indexPaths = [NSIndexPath]()
-            
             for sendState in sendStates {
                 if let indexInMessage = self.messages.indexOf(sendState) {
-                    var reverseIndex = (self.messages.count - indexInMessage - 1)
+                    var reverseIndex = (self.messages.count - indexInMessage - newMessageState)
                     var actuallIndexInCollectionView = self.displayedMessagesRange.length - reverseIndex
                     var newIndexPath = NSIndexPath(forItem: actuallIndexInCollectionView, inSection: 0)
                     indexPaths.append(newIndexPath)


                // TODO: 需要更好的下载与 mark as read 逻辑：也许未下载的也可以 mark as read
                downloadAttachmentOfMessage(message)

                switch message.mediaType {
                case MessageMediaType.Image.rawValue:

    
    func updateMessagesStates() {

        self.delay(0.1) {

            self.removeSendStates()

