     }()
 
     private let messagesBunchCount = 20 // TODO: 分段载入的“一束”消息的数量
-    private var displayedMessagesRange = NSRange()
+    private var displayedMessagesRange = NSRange() {
+        didSet {
+            needShowLoadPreviousSection = displayedMessagesRange.length >= messagesBunchCount
+        }
+    }
+    private var needShowLoadPreviousSection: Bool = false {
+        didSet {
+            if needShowLoadPreviousSection != oldValue {
+                needReloadLoadPreviousSection = true
+            }
+        }
+    }
+    private var needReloadLoadPreviousSection: Bool = false
 
     // 上一次更新 UI 时的消息数
     private var lastTimeMessagesCount: Int = 0

        switch section {

        case .LoadPrevious:
            return displayedMessagesRange.length < messagesBunchCount ? 0 : 1

        case .Message:
            return displayedMessagesRange.length

                    indexPaths.append(indexPath)
                }

                conversationCollectionView.performBatchUpdates({ [weak self] in
                    if needReloadLoadPreviousSection {
                        self?.conversationCollectionView.reloadSections(NSIndexSet(index: Section.LoadPrevious.rawValue))
                        self?.needReloadLoadPreviousSection = false
                    }
                    self?.conversationCollectionView.insertItemsAtIndexPaths(indexPaths)
                }, completion: { _ in
                })

                println("insert messages B")
            }
