在数据库

时间:2017-05-28 18:21:36

标签: ios swift firebase-realtime-database

我使用此功能检查我的数据库中是否存在某个句柄。它在大多数情况下工作正常 - 如果句柄存在,它会更新表视图以显示该用户。但是,如果输入的句柄不匹配,则我的警报视图不会显示。

// Search DB for matching handles
@IBAction func searchHandleButtonPressed(_ sender: Any) {

    if let handleToSearch = handleSearchTextField.text?.lowercased() {
        let databaseRef = FIRDatabase.database().reference()
        databaseRef.child("users").queryOrdered(byChild: "lowercaseHandle").queryEqual(toValue: handleToSearch).observeSingleEvent(of: .value, with: { (snapshot) in

            if let snapDict = snapshot.value as? [String:AnyObject] {

                for each in snapDict{

                    let key  = each.key
                    let handle = each.value["handle"] as! String
                    self.returnedHandles.removeAll()
                    self.returnedHandles.append(handle)
                    let pic = each.value["profilePicture"] as! String
                    self.returnedUsersProfilePic = pic
                    self.returnedUsersUID = key

                    if handle.lowercased() != handleToSearch {
                        self.noHandleFoundAlert()
                    }

                    if handle != "" {
                        DispatchQueue.main.async {
                            self.getFriendsInfo()
                            self.tableView.reloadData()
                        }
                    }
                }
            }
        }, withCancel: {(Err) in
            //                print(Err.localizedDescription)
        })
    }
}

我将警报放在循环中:

if handle.lowercased() != handleToSearch {
      self.noHandleFoundAlert()
}

但显然这不是正确的方法,因为它不起作用。如果我输入一个随机字符串,或者我知道不使用的句柄,警报就不会出现。我还会在哪里发出警报,以便在没有匹配时显示警告?

2 个答案:

答案 0 :(得分:1)

快照将使用您当前的代码转换为空字典。

在将snapshot.value转换为字典之前,请检查它是否与snapshot.exists()存在:https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/FIRDataSnapshot#-exists

答案 1 :(得分:0)

首先,您必须检查您所做的查询是否包含数据。所以你有一个

 .hasChild("handle")

它返回一个布尔值,所以当为真时你做循环,否则通知用户。