2017-01-05 17 views
0

だから、Tinderのような働きをするiOS Firebaseプロジェクトがあります。子としてすべての製品を含むノードがあります。徐々にFirebaseの子どもたちをダウンロードしています。iOS

ユーザーがアプリを入力すると、左にスワイプして不要な商品や保存したい商品を表示できます。

私の問題は、現在、私のFirebaseプロジェクトは、すべての製品を一度にダウンロードしています。これは明らかに、画像を持つ100以上の製品では実行できません。最初に3つの製品をダウンロードするシステムを実装したいと思います。次に、ユーザーが最初の製品の左/右をスワイプすると、別の製品をダウンロードしてリストの後ろに追加し、常に3つの製品バッファーが存在するようにします。

質問は、ユーザーがスワイプする(私の子供はすべて.childByAutoId)場合にのみ、.childAddedを吐き出すためにFirebaseを取得するにはどうすればいいですか?

商品は削除できるので、現在の商品アイテムのインデックスを保持することはできません。

ありがとうございます。

+0

あなたがやっていることはかなり多くのページングです。ユーザーがデータを移動するにつれて、より多くのデータがロードされます。 1回に1回、3回に1回、テーブルビューにデータを取り込む10のいずれの処理でも、プロセスはほぼ同じです。 Firebase Paginationで検索してください - 多くの回答と代替の方法があります。 – Jay

答えて

0

各アイテムにマーカーを保存する必要があります(子供の作成時間に基づいてアイテムを徐々にダウンロードする場合はタイムスタンプが必要な場合があります)。

その後、単にこのようなクエリを使用します。これが機能するためにはということ

var startingValue: String = "" 
if itemsArray.count == 0 { 
    startingValue = Date() // start at the current date and work your way backwards 
} 
else { 
    startingValue = itemsArray.last.timestamp // last item we stopped at in the retrieval process 
} 

itemsRef.queryOrderedByChild("timestamp").queryStartingAtValue(startingValue).queryLimitedToFirst(numberOfItemsToBeRetrievedPerQuery).observeEventType(FIRDataEventType.value, withBlock: { (snapshot) in 
    // append the retrieved items to your array 
}) 

注意(私は仮定していた、最初の最新アイテムを取得するには、あなたが何をしようとしてです)、 の負のという記号(これは逆になる)を使用してUNIXのタイムスタンプを保存する必要があります。だからあなたの構造は次のようになります:

"items" : { 
    "item1Key" : { 
     "itemName": "Item 1" 
     "moreItemData": "random data" 
     "timestamp": -1.57983164250361E12 
    }, 
    "item2Key" : { 
     "itemName": "Item 2" 
     "moreItemData": "random data" 
     "timestamp" : -1.42182335765741E12 
    }, 
    ... 
} 

あなたはこのquestion年代はあなたの実装に役立つ答えるかもしれません!

0

最初に気になることは、現在バッファにあるアイテムの数を追跡することだけです。それが最低よりも低い場合は、さらにダウンロードします。Firebaseはすべてのダウンロード操作をバックグラウンドで行いますので、心配する必要はありません。また、カウンターのクロージャを使用してダウンロードを自動化することもできます。

子ノードのリストから一定量をダウンロードするには、firebaseクエリをチェックアウトします。それらは、あなたに返されるノードをソートするため、および特定のインデックスでノードを取得するために使用されます。

ただし、これによってノードが潜在的に削除されるという問題は解決されません。そのためには、現在表示されているアイテムのハッシュを計算し、現在のセッションで表示されたアイテムのハッシュテーブルと比較することができます。一致するものが見つかった場合、そのアイテムは既に閲覧されており、データベースにはインデックスのシャッフルがいくつかあります。 (アイテムが削除されました)

ちょっと考えました。

関連する問題