Я использую эту функцию, чтобы проверить, существует ли определенный дескриптор в моей базе данных. Он работает нормально по большей части - если дескриптор существует, он обновляет табличное представление для отображения этого пользователя. Однако, если не найдено совпадений для введенного дескриптора, мое представление предупреждений не отображается.

// 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()
}

Но очевидно, что это не правильный подход, так как он не работает. Если я ввожу случайную строку символов или если я знаю, что неиспользуемый дескриптор, предупреждение не появляется. Где еще я мог бы поставить предупреждение, чтобы оно появилось, если нет совпадений?

0
KingTim 28 Май 2017 в 21:21

2 ответа

Лучший ответ

Снимок будет преобразован в пустой словарь с вашим текущим кодом.

Перед преобразованием snapshot.value в словарь проверьте, существует ли он с snapshot.exists(): https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/FIRDataSnapshot#-exists

1
Frank van Puffelen 28 Май 2017 в 23:38

Сначала вы должны проверить, есть ли у вашего запроса данные. Итак, у вас есть

 .hasChild("handle")

Он возвращает логическое значение, поэтому, когда значение true, вы делаете цикл, иначе уведомляете пользователя.

0
Edu 28 Май 2017 в 21:15