2017-05-28 42 views
0

我正在使用此函数来检查数据库中是否存在某个句柄。它大部分工作正常 - 如果句柄存在,它会更新表视图以显示该用户。但是,如果没有匹配输入的句柄,我的警报视图不会显示。当在数据库中找不到匹配时弹出警报不显示

// 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

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

+0

太好了,这个问题解决了。我只是把'if let snapDict'放在'if snapshot.exists()'的情况下,而'else'是'noHandleFoundAlert'。谢谢,如果你想要业力,随时发布它作为答案! – KingTim

回答

0

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

.hasChild("handle") 

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