さまざまな Twitter クライアントで見られるものとほとんど同じように、フィード タイムラインのギャップを処理する方法のロジックを整理するための支援を探しています。ただし、私は Twitter クライアントを作成していないので、その API に固有のものではありません。私は独自の API を使用しているので、これに対応するために API にもいくつかの変更を加えることができます。
各フィード アイテムを Core Data に保存しています。永続性のために、フィード項目を保持したいと思います。サーバーから 50 個のフィード アイテムをフェッチするとします。次回ユーザーがアプリを起動したときに、最新のフィード アイテムをリクエストすると、50 個のフィード アイテムが返され、フェッチを実行してフィード アイテムをテーブル ビューに表示します。
2 つのサーバー リクエストの間に十分な時間が経過しているため、2 つのフィード アイテム セットの間に時間のギャップが存在する可能性があります。
50 new feed items (request 2)
----- gap ------
50 older feed items (request 1)
* end of items in core data - just load more *
request 2
のフィード アイテムの最も古いタイムスタンプと の一連のフィード アイテムの最新のタイムスタンプを比較して、ギャップが存在するかどうかを追跡しrequest 1
ます。からの最も古いタイムスタンプがからrequest 2
の最新のタイムスタンプよりも大きい場合request 1
、ギャップが存在すると想定でき、さらに 50 個を読み込むためのボタンを含むセルを表示する必要があります。からの最も古いタイムスタンプrequest 2
が最新のタイムスタンプ以下である場合request 1
、ギャップは埋められており、ローダーを表示する必要はありません。
私の最初の問題は、「さらに読み込む」セルを表示するかどうかを追跡するためのロジック全体です。このギャップを表示する場所をどのように知ることができますか? NSManagedObject entity
上記の 2 つの間に余分な bool + タイムスタンプを追加してフィード項目と同じように保存し、それに応じて UI を変更しますか? ここで別のより良い解決策はありますか?
私の 2 番目の問題は、複数のギャップに関連しています。
50 new feed items
----- gap ------
174 older feed items
----- gap ------
53 older feed items
* end of items in core data - just load more *
この場合、 を使用すると役立つと思いますNSManagedObject entity
ので、Core Data で通常のフェッチを実行し、それらがオブジェクトの中に表示される場合は、それらを読み込みセルとして表示し、それに応じて削除します (いずれかの間にギャップが存在しない場合)ギャップのセット)。
ユーザーはおそらくそれほど長くは戻らないので、特定の時間が経過した後、最終的にオブジェクトをワイプしたいと思います。必要に応じて、いつでもサーバーからオブジェクトをフェッチできます。
このテーマに関する経験やアドバイスをいただければ幸いです。