私はコードが不足しているため、Firebaseがかなり新しくなっているので、「ここでどこから始めるべきか分かりません」ということをもっと試してみるのが欠けているわけではありません。新しい投稿のみを返すFirebaseクエリですか?
私は10分 "古い"以下の投稿のみを表示しようとしています。私は、毎晩クエリを送信するために、アプリでタイマーを実行するつもりです(問題があまり発生しないと仮定します)。現在の投稿が10分を超えていないことを確認します。彼らは、クエリはそれらを返すべきではありません。
ユーザーが投稿を作成したときにタイムスタンプが作成される場所を設定しました。
設定は次のとおりです。
Posts
02983094jfksdflkaj3l
timestamp: 23478923019
私はorderByValueする必要があると仮定していますか?タイムスタンプで投稿を並べ替えて、それをある種類の制限で返しますが、そのすべてをどのようにマップするかはわかりません。
ここでは正しい方向のポイントを高く評価します。
ありがとうございます!
編集:私はもうコレクションビューに表示されている投稿を取得していません...そして、10分未満のクエリを満たす必要のある投稿数にかかわらず、1つしか返されません。
私は以下に示すように、スナップショットで.valueリターンを取得していません...タイムスタンプ値を返す必要があります。タイムスタンプスナッププリントに表示されます。
override func viewWillAppear(animated: Bool) {
let cutoff = UInt64(1000 * floor(NSDate().timeIntervalSince1970) - 10*60*1000);
let cutoffFloat = Float(cutoff) // <-- woudnlt take a UInt64 as an AnyObject. I assume its ok to just do this?
DataService.ds.REF_POSTS.queryOrderedByChild("timestamp").queryStartingAtValue(cutoffFloat).observeSingleEventOfType(.ChildAdded) { (snapshot: FIRDataSnapshot) in
print("child added") // <------- isn't ever getting called
self.Posts = []
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {
print("timestamp snap: \(snap)") // <---- returns timestamp snap: Snap (timestamp) 23904819242
if let postDict = snap.value as? Dictionary<String, AnyObject> {
print(snap.value)// <----- Returns nothing
let key = snap.key
let post = Post(postKey: key, dictionary: postDict)
self.Posts.append(post)
}
}
}
self.collectionView.reloadData()
}
私はそれが任意のヘルプですが、ここに私のコードだった場合、私はコレクションビューを移入する前に使っていたかわからない。ここで
DataService.ds.REF_POSTS.observeEventType(.Value) { (snapshot: FIRDataSnapshot) in
self.Posts = []
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {
print(snap)
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Post(postKey: key, dictionary: postDict)
self.Posts.append(post)
}
}
}
print("got here")
self.collectionView.reloadData()
}
タイマーはおそらく不要で、過去10分間に1,024件の投稿があったと考えてください。これらの投稿のうち、どれくらいをお客様のクライアントに配信する必要がありますか?私が推測していることは、それらのすべてに興味があるかもしれないが、実際には一度に20件(たとえば)、あるいは最近の20件だけを表示したいということです。Firebaseは非同期であることを覚えておいてください。新しい投稿が自動的に通知されますので、常に最新の投稿が表示されます。ポーリングはFirebaseに作業をさせることで完全に排除することができます。 – Jay
@Jay 友人のグループから一度に投稿がユーザーに表示されることは常に許可されます。実装しようとしている機能には10分のビットが重要です。限られた量の「ショータイム」を持つ投稿とやりとりすることがアプリのポイントとして表示される投稿がない場合は大丈夫です。 ユーザーの友だちの投稿から制限を9つだけ取り除くと、情報の洪水や何かの問題があってはいけませんか? 私はこれがこれについての最良の方法だと仮定しています。あなたはこのようにそれについて行くと何かが目障りに間違っているのを見ますか? – Noowoo