2016-03-04 81 views
2

我想從用戶通過@IBAction從用戶名獲得用戶名。檢查用戶名是否存在於Firebase DB中。

我的目標是檢查用戶名是否已存在於Firebase中。如果它不存在,則註冊它。如果它確實存在,我想做一些其他的事情。

這是我的代碼。

@IBAction func enterUsername(){ 

    let enteredUsername = usernameText!.text! 
    let namesRef = ref.childByAppendingPath("/usernames/\(enteredUsername)") 

    namesRef.observeEventType(.Value, withBlock: { 
     snap in 

     if (snap.value is NSNull){ 
      let userNameAndUUID = ["Username" : enteredUsername, "UUID" : self.appDelegate.UUID] 
      namesRef.setValue(userNameAndUUID) 
      print("first block") 
     }else { 
      print("second block") 
      //do some other stuff 
     } 
    }) 
} 

我遇到的問題是,如果用戶名是唯一的(不存在),那麼運行if/else的BOTH打印語句。 輸出: 第一塊 第二塊

如果名稱不是唯一的,它被適當地跳過的如果/否則如果部分。

爲什麼if/else語句的兩個部分都在運行?

感謝您的任何幫助。

回答

2

你看到的行爲的確是有意的。由於您正在附加一個觀察者,因此第一個if塊正在運行一個唯一的名稱,但在該塊內,您正在設置一個值。

這將再次觸發回調,這次將通過else塊運行。

更改此代碼的正確方法是使用observeSingleEventOfType,以便您只讀取一次值並且不要連續觀察它。

+0

當然,這是有道理的。謝謝。 – jakhamma

相關問題