2017-04-11 158 views
0

在我們的iOS應用程序中,我們使用核心數據並使用NSFetchedResultsController將其與表視圖綁定。該應用程序是關於「聊天」功能。

UI與iPhone「Messages」應用程序的UI相同。當我們點擊一​​條消息時,它會顯示歷史和所有按時間分組的歷史記錄。其背後的邏輯是,如果先前的消息和當前消息以1小時的間隔接收,則日期&時間戳將顯示在最近的消息上。

我的問題是,我如何分組消息並獲取它們,以便我可以顯示日期&時間戳以及發件人和收件人消息。將類似於iPhone的消息分組消息應用程序

回答

0

有四種類型的消息單元類型 - 常規,組啓動,組中間,組結束。小組開始消息在最後一個小時後超過一小時,但小於一小時到下一個小時。小組中間距離前後不到一小時。羣端與之前的相近,但比它之後的時間多一小時。正常情況下是一個多小時前後。

這個項目有兩個部分。一種是正確顯示每種類型的單元格。另一個是計算每個消息的類型。我假設你可以自己弄清楚用戶界面的東西(不同的填充,每個填充,常規和組開始顯示時間,而不是四捨五入等)。

對於每個消息來找出它的類型,並不難 - 只要看看它之前和之後的消息。它可以在一次運行中完成 - O(n)。它也可以用緩存懶散地完成(也就是說,每次小區負載在它之前和之後檢查消息 - 下一次將答案保存在緩存中)。如果不同類型的單元格大小不同,那麼使用estimatedRowHeight會導致一些奇怪的跳躍。計算後,您還可以將類型的結果存儲到核心數據中。

當插入消息使無效和重新計算其上下的消息單元類型時,請小心。另外,當計算消息單元類型帳戶的情況下,沒有下一個或上一個單元格。

我想你是希望得到一些核心數據魔法 - 就像sectionIndexKey中的一些切割技巧。但是通過數組並計算它真的非常簡單。

+0

謝謝。它不像我們所知道的關於實施的理論那麼簡單。核心數據以及Fetch結果控制器並相應地更新集合視圖/表視圖是一個非常複雜的解決方案。 – Satyam

+0

我已經完成了。花了我大約2周。如果你仍然有問題,只是fetchedResultsController和更新,那麼我會建議先獲得100%,然後添加關閉消息分組。 –

+0

感謝您的建議。 fetchedResultsController實現完全沒有問題,它已經完成了。在進行分組時,必須在兩條消息之間添加日期和時間戳,並且該日期和時間戳也不是節標題。它與「iPhone上的消息」中的正常行一樣。當我們使用table view和fetched results controller - 行數時,cellForRowAtindexPath ec方法。將基於獲取的結果數組。這會導致問題插入帶有日期和時間戳的行。 – Satyam