2016-04-06 15 views
4

私は、ユーザーがユーザー名を検索して他のユーザーとゲームを開始できるようにしようとしています。そのユーザー名を持つユーザーが存在することを確認する必要があります。私は次のコードを使用していましたが、ifelseと呼ばれていますが、呼び出す必要はありません。スイフト&ファイアーベース|ユーザーがユーザー名で存在するか確認する

let checkWaitingRef = Firebase(url:"https://test.firebaseio.com/users") 
checkWaitingRef.queryOrderedByChild("username").queryEqualToValue("\(username!)") 
      .observeEventType(.ChildAdded, withBlock: { snapshot in 

    if snapshot.value.valueForKey("username")! as! String == username! { 

    } else { 

    } 

JSONデータツリー

{ 
    "097ca4a4-563f-4867ghj0-6209288bd7f02" : { 
     "email" : "[email protected]", 
     "uid" : "097ca4a4-563f-4867ghj0-6209288bd7f02", 
     "username" : "test1", 
     "waiting" : "0" 
    }, 
    "55a8f979-ad0d-438u989u69-aa4a-45adb16175e7" : { 
     "email" : "[email protected]", 
     "uid" : "55a8f979-ad0d-438u989u69-aa4a-45adb16175e7", 
     "username" : "test2", 
     "waiting" : "0" 
    } 
} 
+0

をチェックし、「それ以外と呼ばれている場合が、私がしたいときに呼び出されません。」あなたはここで何を意味するのですか? – Khuong

+0

@ khuong291 if文が "活性化"されているということです: 'if snapshot.value.valueForKey(" username ")!として! String == username! {'しかし、それが必要なときでさえ、else文は決して何もしません。 –

+0

if文がtrueであるため、else文が実行されないので、正しいです。 – Khuong

答えて

6

簡単修正:

クエリが何も見つからないときのブロックが実行されないよう.childAddedを使用しないでください。

代わり.Valueのを使用してnsnullを

let checkWaitingRef = Firebase(url:"https://test.firebaseio.com/users") 
    checkWaitingRef.queryOrderedByChild("username").queryEqualToValue("\(username!)") 
       .observeEventType(.Value, withBlock: { snapshot in 

      if (snapshot.value is NSNull) { 
       print("not found)") 

      } else { 
       print(snapshot.value) 
      } 
    } 
+0

私はこのアプローチをテストしましたが、コールバック関数は何度か呼び出されます。したがって、出力セクションでは、「見つからない」という結果が得られ、スナップショットの値は1つの結果しか得られません。 – franswa

+0

.valueはノードの内容全体を読み込むので、ノードを変更しない限り、複数回呼び出されることがあります。 observeSingleEventOfTypeを実行することもできます。 – Jay

+0

ええ、私は間違ったことをしているにちがいない...私は昨日それを苦労して昨日苦しんでいたが、今はあなたのように働いているようだ。 – franswa

関連する問題