2016-05-11 7 views
0

私は迅速かつfirebaseを使いこなすのが新しいです、私は単純なアプリケーションを作っています。これは、ユーザがセルラープレフィックス番号を入力し、その番号であるセルラーネットワークを表示させるものです。私のIf-Elseブロックは、それほど機能しないのはなぜですか?

if-else部分には大きな問題があります。 else部分を追加するたびに、ラベルには常に「Missing」と表示されますが、snapshot.keyとsnapshot.valueを出力するたびに、コンソールで正しい結果が得られます。 else部分を削除すると動作します。私は本当に答えを見つけ出すのに苦労しています。前もって感謝します!コードは次のとおりです。

import UIKit 
import Firebase 

class ViewController: UIViewController, FBSDKLoginButtonDelegate { 

let loginButton: FBSDKLoginButton = { 
    let button = FBSDKLoginButton() 
    button.readPermissions = ["email"] 
    return button 
}() 

@IBOutlet weak var numField: UITextField! 
@IBOutlet weak var answerField: UILabel! 

@IBAction func enterButton(sender: AnyObject) { 
    matchNumber() 
} 

func matchNumber(){ 

    let number: String = numField.text! 
    let numRef = Firebase(url: "https://npi2.firebaseio.com/num_details") 
    numRef.queryOrderedByKey().observeEventType(.ChildAdded, withBlock: { snapshot in 
     let network = snapshot.value as! String! 
      if snapshot.key == self.numField.text! { 
       self.answerField.text = network 

      } 
      else { 
       self.answerField.text = "Missing" 
      } 

    }) 

    } 
+2

投稿したコードには「else」はありません。投稿されたコードを問題に関連する部分だけに絞り込んでください。 – rmaddy

+0

私の悪い申し訳ありません。私はすでにそれを編集しました。ありがとうございます – asdf

+0

'snapshot.key'と' self.numField.text! 'を印刷するとどうなりますか?あなたはスナップショットのキーと値について言及しましたが、 – Fonix

答えて

1

私は何が起こっているのか知っていると思います。


説明:

1)あなたはFirebaseにあなたの要求を行います。

2)要求は非同期なので、コードは実行され続けます。

3)要求がまだ行われていないため、値が返されていないためにelseステートメントが実行されます(初期状態をチェックします)。

4)elseを削除すると、コードはifを実行します。要求が完了するまで実行する必要がないためです(初期状態はチェックされていますが、実行するコードはありません。データ変更であり、if文が実行されます)。


REFERENCE:

「Firebaseデータは、データベースの参照に非同期リスナーを取り付けることにより取得されます(Pあなたがここに来る前に読んでいる必要があること)FIREBASEドキュメンテーションから

。リスナは、データの最初の状態に対して一度だけがトリガされ、データがに変更されるといつでもトリガされます。このドキュメントでは、データの取得の基本、データの順序Firebaseデータベース内のデータに対して簡単なクエリを実行する方法について説明します。

https://www.firebase.com/docs/ios/guide/retrieving-data.html


SOLUTION:

完了ハンドラを使用してください。それはそれのために作られています。そのようなご要望の中にelse声明を使用しないでください。 Firebaseの使い方ではありません。

関連する問題