tableViewにコンテンツを表示するiOSアプリがあります。データベースと相互作用する「好き/嫌い」機能を追加しました(私はParse.comを使用しています)。誰かがコンテンツの一部を好き/嫌いになるたびに、詳細が解析データベースに送信されます。コンテンツごとに、「いいね」+「嫌い」に対する「いいね」の割合を計算して表示したいと思います。これは非常に単純な計算ですが、データベーステーブルを設計する最良の方法と、tableViewが物理的に表示される前に各コンテンツの「いいね」の割合を計算する最も効率的な方法に頭を悩ませることはできません。
現状では、tableViewにループがあり、viewDidLoad
別のデータベーステーブルのコンテンツを「好き/嫌い」テーブルと比較して、ユーザーの「好き/嫌い」ボタンの状態を復元します(既に好き/嫌いな場合)コンテンツの)。
最初は、最初のviewDidLoad
ループで配列を作成することを考えました。ただし、whereKey: equalTo:
各ピースコンテンツのクエリの種類を使用して、好き嫌いの量を簡単に見つけるには、永遠に時間がかかります。予想通り、それも非常に遅いcellForRowAtIndexPath
です。
最悪の場合、これらの計算をサーバー側で行い、「いいね」の割合を引き出すことができます。しかし、どういうわけかこれをアプリに実装したいと思います。私は完全な初心者なので、これはすべて間違っているかもしれません。
これが私のデータベーステーブルの基礎です:
編集:コンテンツの一部を「好き」なユーザーの割合を計算するサーバー側プログラムを構築することができました。私のアプリは、実行時にデータベースからこのパーセンテージを取得します。ユーザーが何かを「気に入った」ときにパーセンテージの変更の応答性を高めるために、更新されたパーセンテージをローカルで計算します。ここでの問題は、ユーザーがアプリを終了して再度開くと、データが再読み込みされることです。サーバー側プログラムが最近実行されていない場合、アプリは古い「いいね」のパーセンテージを表示します(最新の%はまだ計算されません)。これを修正するために私が見る2つの解決策は次のとおりです。
- サーバー側プログラムを1〜3分ごとに実行する
- 誰かがコンテンツを気に入ったら、データベースにさらにデータを投稿します(これには、「like」ごとに追加のデータベースクエリが含まれます)。
これらのオプションは両方とも、私が達成しようとしていることにはあまりにも高価だと思います。