Swift-Firebase-使用未指定的索引

时间:2019-05-30 15:51:24

标签: swift firebase uitableview firebase-realtime-database uid

我写了下面的代码,它应该由用户从Firebase返回memoriestableView。例如,如果用户a登录到应用程序,则a的所有内存都应位于tableView中。

由于某种原因,它不起作用,您可以清楚地看到特定内存与用户具有相同的uid。 它说“ Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding ".indexOn": "uid" at /MEmories to your security rules for better performance

enter image description here

func loadMemories() {
let userID = Auth.auth().currentUser?.uid
self.ref.child("MEmories").queryOrdered(byChild: "uid").queryEqual(toValue: userID!).observe(.value, with: { snapShot in

    if let dict = snapShot.value as? NSDictionary {

        for d in (dict as? Dictionary<String,AnyObject>)! {

            let title = d.value["title"] as?String
            let body = d.value["body"] as? String
            let uid = d.value["uid"] as? String
            let imageRef = d.value["imageRef"] as? String
            let date = d.value["date"] as? NSNumber

            let m = Memory(title: title!, body: body!, uid: uid!,imageRef:imageRef!, date: date!)
            m.key = d.key

            let tempImageRef = self.sref.child(m.imageRef)
            tempImageRef.getData(maxSize: 1*1024*1024, completion: { (data,error) in

                if error == nil {

                    if let imageData = data {

                        m.image = UIImage(data: imageData)
                        self.memories.append(m)
                        self.tbl.reloadData()
                    }
                }
            })
        }
        self.tbl.reloadData()
    } // end of if
    self.ref.child("MEmories").removeAllObservers()
})
}

1 个答案:

答案 0 :(得分:-1)

已编辑

很抱歉,您的查询应返回与该uid关联的内存。您是否仔细检查过

  • 您的tableView tbl已被委派/正确设置

  • 您的图像和图像数据已正确加载(否则if语句失败,并且未添加内存)

您可以将.observe替换为.observeSingleEvent,因此以后也无需删除观察者。

此外,您不应该为每个分支存储一个单独的uid分支。 UserMEmories(例如Lg7rOvv_pO3rXiUnRc_)之类的分支是uid,因此您无需再创建另一个。您所有的User分支子分支应由userId而不是其他uid组成,然后创建一个单独的User-Memories分支以包含该用户的记忆列表{ 1}},并且在每个uid分支的子分支中都有一个memories分支。

更好的数据结构可能看起来像这样:

Users