2017-09-12 6 views
0

xcodeのFirebaseデータベースで選択を行い、結果を表に表示しようとしていますが、結果は非常に奇妙です。それは同じエントリ上でforループを実行するようなものです。おそらくテーブルのせいかもしれない。 特定の選択のFirebaseデータベースクエリ

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) 
let groceryItem = items[indexPath.row] 

// Below is code to query users in Firebase to check if it is the current user. 

let selection = ref.queryOrdered(byChild: "addedByUser").queryEqual(toValue : user.email) 

selection.observeSingleEvent(of: .value, with:{ (snapshot: FIRDataSnapshot) in 
    if let value = snapshot.value as? [String: Any] { 
    print(value) 
    } 
}) 
//End of code 


//if user.email == groceryItem.addedByUser { 
cell.textLabel?.text = groceryItem.name 

cell.detailTextLabel?.text = groceryItem.addedByUser 
// } 
toggleCellCheckbox(cell, isCompleted: groceryItem.completed) 

return cell 
} 

とFirebaseは次のとおりです。

{ 
    "expense-items" : { 
    "20170509" : { 
     "addedByUser" : "[email protected]", 
     "amount" : 37, 
     "categoryType" : "Shopping", 
     "completed" : false, 
     "name" : "Dijon", 
     "paymentType" : "Cash" 
    }, 
    "zambon" : { 
     "addedByUser" : "[email protected]", 
     "amount" : 13, 
     "categoryType" : "Shopping", 
     "completed" : false, 
     "name" : "zambon", 
     "paymentType" : "CreditCard" 
    }, 
    "zouzouni" : { 
     "addedByUser" : "[email protected]", 
     "amount" : 24, 
     "categoryType" : "Kids", 
     "completed" : false, 
     "name" : "zouzouni", 
     "paymentType" : "Cash" 
    } 
    } 
} 

のみ20170509がログインしているユーザからのものであり、私は3回20170509のエントリを取得します。 正しい結果をテーブルに取り込むために、選択結果をどのように数えることができますか?

+0

これをチェックアウトしましたか? https://stackoverflow.com/questions/40316200/firebase-queryequaltovalue-get-key-in-swift-2-3 – arvidurs

+0

こちらも最後に追加してください: .queryLimited(toFirst:1) – arvidurs

+0

あなたの質問にJSONツリーの写真が含まれていました。実際のJSONをテキストとして置き換えてください。このテキストは[Firebaseデータベースコンソール](https://console.firebase.google.com/project/_/database/data/)の[Export JSON]リンクをクリックすることで簡単に取得できます。 。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –

答えて

0

だから間違っていた。私はtableView関数のリストをチェックしてはいけません。 私がしなければならなかったのは、新しいリストをviewDidLoadに移入し、これをすべて使用することでした。

if FIRAuth.auth()?.currentUser != nil { 
    let selection = ref.queryOrdered(byChild: "addedByUser").queryEqual(toValue : FIRAuth.auth()?.currentUser?.email) 

     selection.observeSingleEvent(of: .value, with:{ (snapshot: FIRDataSnapshot) in 

     var newItems: [ListItem] = [] 

     for item in snapshot.children { 
      let listItem = ListItem(snapshot: item as! FIRDataSnapshot) 
      newItems.append(listItem) 
     } 

     self.items = newItems 

     self.tableView.reloadData() 
     }) 
}