Firebaseクエリから結果を取得することはできますが、辞書として取得してtableViewに取り込むことができません。ここで私は、クエリの結果を格納しています方法は次のとおりです。Firebase辞書の結果を取得しますか?
var invites: Array<FIRDataSnapshot> = []
func getAlerts(){
let invitesRef = self.rootRef.child("invites")
let query = invitesRef.queryOrderedByChild("invitee").queryEqualToValue(currentUser?.uid)
query.observeEventType(.Value, withBlock: { snapshot in
self.invites.append(snapshot)
print(self.invites)
self.tableView.reloadData()
})
}
印刷self.invitesは以下を返します:
[Snap (invites) {
"-KKQWErkyuehmbxom8NO" = {
invitedBy = T2k7Bm9G9RNLcHLvLlKApRbnas23;
invitee = dRJ1FqctSfTlLF8iO2ddlc9BANJ3;
role = guardian;
};
}]
私はトラブルのtableViewの移入を抱えています。セルのラベルには何も表示されません。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
let inviteDict = invites[indexPath.row].value as! [String : AnyObject]
let role = inviteDict["role"] as? String
cell.textLabel!.text = role
return cell
}
ありがとうございます!
EDIT:私の機能が実行された後に辞書をコンソールに印刷しました。それは[]
です。なぜそれが価値を失うのですか?
override func viewWillAppear(animated: Bool) {
getAlerts() // inside of function prints values
print(self.invites) //prints []
}
EDIT 2:Paulのソリューションが機能しました!私は次の機能を追加してFirebaseに結果を "聴く"ようにしました!私がログインしているユーザーのための唯一のショーアラートにこれを編集する必要がありますが、これは、少なくとも正しい方向に私を指摘している:Firebaseは非同期であるため
override func viewWillAppear(animated: Bool) {
getAlerts()
configureDatabase()
}
func configureDatabase() {
// Listen for new messages in the Firebase database
let ref = self.rootRef.child("invites").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in
self.invites.append(snapshot)
self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: self.invites.count-1, inSection: 0)], withRowAnimation: .Automatic)
})
}
getAlerts関数の外部でクエリの後に辞書がnilを返さないことを確認する必要があります。私は同じ問題を抱えてきた。値は関数内に格納されますが、一度放置すると値はnilを返します –
返信いただきありがとうございます。私はあなたが何かにいると思う!私はちょうど私の質問を更新した。私はコンソールが実行された後、コンソールにdictを表示し、今は '[]'を表示しています。一体何が起こっているの?これをどうすれば解決できますか? – winston
私はこの問題を約2日間は自分で解決しようとしてきました。私はこのスレッドに非常に細心の注意を払っています。うまくいけば、誰かが解決策を思いつきます。その間は、プロパティオブザーバを使用して試すことができます。あなたの辞書がどこに設定されていないかを教えてくれます。私は今日それについて自分で学んだ。 –